{
  "schemaVersion": "1.0",
  "item": {
    "slug": "whalecli",
    "name": "WhaleWatch CLI",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/bowen31337/whalecli",
    "canonicalUrl": "https://clawhub.ai/bowen31337/whalecli",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/whalecli",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=whalecli",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/whale_scan.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/whalecli"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/whalecli",
    "agentPageUrl": "https://openagent3.xyz/skills/whalecli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/whalecli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/whalecli/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "WhaleWatch CLI — Agent Skill",
        "body": "Track crypto whale movements. Close the loop from on-chain signal → agent reasoning → prediction market bet."
      },
      {
        "title": "Install",
        "body": "uv pip install whalecli"
      },
      {
        "title": "Quick Start",
        "body": "# Initialize config (creates ~/.config/whalecli/config.toml)\nwhalecli config init\n\n# Set API key (free tier: 5 req/sec)\nwhalecli config set api.etherscan_api_key YOUR_KEY\n\n# Add a whale wallet\nwhalecli wallet add 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --label \"vitalik.eth\" --chain ETH\n\n# Scan all wallets (last 24h)\nwhalecli scan --format json\n\n# Stream real-time alerts (JSONL, one event per line)\nwhalecli stream --chain ETH --interval 60"
      },
      {
        "title": "When to Use",
        "body": "Trigger phrases:\n\n\"What are the whales doing?\"\n\"Check whale activity on ETH/BTC\"\n\"Are whales accumulating or distributing?\"\n\"Any large wallet movements?\"\n\"What's the on-chain signal?\"\n\"Run a whale scan\"\n\nAutomatic triggers (no user prompt needed):\n\nEvery 60 minutes during market-active hours (via heartbeat)\nBefore placing a Simmer/Polymarket bet (pre-bet whale sanity check)\nWhen fear/greed index crosses a threshold (corroboration)"
      },
      {
        "title": "whalecli scan — One-shot whale analysis",
        "body": "whalecli scan --chain ETH --hours 4 --threshold 70 --format json\n\nOutput (JSON):\n\n{\n  \"scan_id\": \"scan_20260222_103015_a1b2\",\n  \"chain\": \"ETH\",\n  \"window_hours\": 4,\n  \"wallets\": [\n    {\n      \"address\": \"0xd8dA...\",\n      \"label\": \"vitalik.eth\",\n      \"score\": 82,\n      \"direction\": \"accumulating\",\n      \"score_breakdown\": {\n        \"net_flow\": 35,\n        \"velocity\": 20,\n        \"correlation\": 15,\n        \"exchange_flow\": 12\n      },\n      \"net_flow_usd\": 15000000,\n      \"tx_count\": 12\n    }\n  ],\n  \"summary\": {\n    \"total_wallets\": 5,\n    \"accumulating\": 3,\n    \"distributing\": 1,\n    \"neutral\": 1,\n    \"avg_score\": 65\n  },\n  \"alerts_triggered\": 2\n}"
      },
      {
        "title": "whalecli stream — Real-time JSONL streaming",
        "body": "whalecli stream --chain ETH --interval 60 --threshold 70\n\nEvents (one JSON per line):\n\nstream_start — stream initialized\nwhale_alert — score exceeded threshold\nwhale_activity — activity detected below threshold\nheartbeat — periodic health check\nstream_end — clean shutdown"
      },
      {
        "title": "whalecli wallet — Manage tracked wallets",
        "body": "whalecli wallet add 0x... --label \"whale1\" --chain ETH\nwhalecli wallet list --format json\nwhalecli wallet remove 0x...\nwhalecli wallet import wallets.csv"
      },
      {
        "title": "whalecli alert — Configure alert rules",
        "body": "whalecli alert set --score 75 --webhook https://example.com/hook\nwhalecli alert set --threshold 1000000 --window 1h\nwhalecli alert list --format json"
      },
      {
        "title": "whalecli report — Historical analysis",
        "body": "whalecli report --wallet 0x... --days 30 --format json"
      },
      {
        "title": "whalecli config — Configuration management",
        "body": "whalecli config init\nwhalecli config set api.etherscan_api_key YOUR_KEY\nwhalecli config show"
      },
      {
        "title": "Exit Codes",
        "body": "CodeMeaning0Success (alerts found or scan complete)1No alerts (scan ran but nothing above threshold)2API error (rate limit, invalid key)3Network error (timeout, connection refused)4Data error (invalid address, wallet not found)"
      },
      {
        "title": "Scoring Algorithm",
        "body": "4-dimension whale scoring (0–100 points):\n\nNet Flow (0–40): USD net flow with log10 scaling, wallet age weighting\nVelocity (0–25): Current activity vs 30-day baseline (log2 ratio)\nCorrelation (0–20): Peer wallet direction agreement (min 2 peers)\nExchange Flow (0–15): CEX address registry lookup + direction match\n\nInterpretation:\n\n80–100: Strong whale signal (high confidence)\n60–79: Moderate activity (worth monitoring)\n40–59: Low activity (noise)\n0–39: Minimal (ignore)"
      },
      {
        "title": "Agent Integration Pattern",
        "body": "import subprocess, json\n\ndef whale_scan(chain=\"ETH\", hours=4, threshold=70):\n    \"\"\"Run whale scan and return parsed results.\"\"\"\n    result = subprocess.run(\n        [\"whalecli\", \"scan\", \"--chain\", chain,\n         \"--hours\", str(hours), \"--threshold\", str(threshold),\n         \"--format\", \"json\"],\n        capture_output=True, text=True, timeout=30\n    )\n    if result.returncode == 2:\n        raise RuntimeError(f\"API error: {result.stderr}\")\n    if not result.stdout.strip():\n        return {\"wallets\": [], \"alerts_triggered\": 0}\n    return json.loads(result.stdout)\n\n# Example: pre-bet whale check\nscan = whale_scan(chain=\"ETH\", hours=4)\nif scan[\"summary\"][\"accumulating\"] > scan[\"summary\"][\"distributing\"]:\n    print(\"Whales accumulating — bullish signal\")"
      },
      {
        "title": "FearHarvester Integration",
        "body": "The closed loop: Fear & Greed → Whale Signal → Simmer Bet\n\n# 1. Get F&G value\nfg_value = get_fear_greed_index()  # e.g., 8 (Extreme Fear)\n\n# 2. Check whale confirmation\nscan = whale_scan(chain=\"ETH\", hours=4)\nwhales_accumulating = scan[\"summary\"][\"accumulating\"] > scan[\"summary\"][\"distributing\"]\n\n# 3. If fear + whales accumulating → strong contrarian signal\nif fg_value <= 20 and whales_accumulating:\n    # Place bet on recovery market\n    place_simmer_bet(market=\"btc_recovery\", side=\"yes\", amount=15)"
      },
      {
        "title": "Supported Chains",
        "body": "ETH — Etherscan API (free tier: 5 req/sec)\nBTC — Mempool.space (primary) + Blockchain.info (fallback)\nHL — Hyperliquid perpetual fills and positions"
      },
      {
        "title": "Links",
        "body": "PyPI: https://pypi.org/project/whalecli/\nGitHub: https://github.com/clawinfra/whalecli\nIssues: https://github.com/clawinfra/whalecli/issues"
      }
    ],
    "body": "WhaleWatch CLI — Agent Skill\n\nTrack crypto whale movements. Close the loop from on-chain signal → agent reasoning → prediction market bet.\n\nInstall\nuv pip install whalecli\n\nQuick Start\n# Initialize config (creates ~/.config/whalecli/config.toml)\nwhalecli config init\n\n# Set API key (free tier: 5 req/sec)\nwhalecli config set api.etherscan_api_key YOUR_KEY\n\n# Add a whale wallet\nwhalecli wallet add 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 --label \"vitalik.eth\" --chain ETH\n\n# Scan all wallets (last 24h)\nwhalecli scan --format json\n\n# Stream real-time alerts (JSONL, one event per line)\nwhalecli stream --chain ETH --interval 60\n\nWhen to Use\n\nTrigger phrases:\n\n\"What are the whales doing?\"\n\"Check whale activity on ETH/BTC\"\n\"Are whales accumulating or distributing?\"\n\"Any large wallet movements?\"\n\"What's the on-chain signal?\"\n\"Run a whale scan\"\n\nAutomatic triggers (no user prompt needed):\n\nEvery 60 minutes during market-active hours (via heartbeat)\nBefore placing a Simmer/Polymarket bet (pre-bet whale sanity check)\nWhen fear/greed index crosses a threshold (corroboration)\nCLI Commands\nwhalecli scan — One-shot whale analysis\nwhalecli scan --chain ETH --hours 4 --threshold 70 --format json\n\n\nOutput (JSON):\n\n{\n  \"scan_id\": \"scan_20260222_103015_a1b2\",\n  \"chain\": \"ETH\",\n  \"window_hours\": 4,\n  \"wallets\": [\n    {\n      \"address\": \"0xd8dA...\",\n      \"label\": \"vitalik.eth\",\n      \"score\": 82,\n      \"direction\": \"accumulating\",\n      \"score_breakdown\": {\n        \"net_flow\": 35,\n        \"velocity\": 20,\n        \"correlation\": 15,\n        \"exchange_flow\": 12\n      },\n      \"net_flow_usd\": 15000000,\n      \"tx_count\": 12\n    }\n  ],\n  \"summary\": {\n    \"total_wallets\": 5,\n    \"accumulating\": 3,\n    \"distributing\": 1,\n    \"neutral\": 1,\n    \"avg_score\": 65\n  },\n  \"alerts_triggered\": 2\n}\n\nwhalecli stream — Real-time JSONL streaming\nwhalecli stream --chain ETH --interval 60 --threshold 70\n\n\nEvents (one JSON per line):\n\nstream_start — stream initialized\nwhale_alert — score exceeded threshold\nwhale_activity — activity detected below threshold\nheartbeat — periodic health check\nstream_end — clean shutdown\nwhalecli wallet — Manage tracked wallets\nwhalecli wallet add 0x... --label \"whale1\" --chain ETH\nwhalecli wallet list --format json\nwhalecli wallet remove 0x...\nwhalecli wallet import wallets.csv\n\nwhalecli alert — Configure alert rules\nwhalecli alert set --score 75 --webhook https://example.com/hook\nwhalecli alert set --threshold 1000000 --window 1h\nwhalecli alert list --format json\n\nwhalecli report — Historical analysis\nwhalecli report --wallet 0x... --days 30 --format json\n\nwhalecli config — Configuration management\nwhalecli config init\nwhalecli config set api.etherscan_api_key YOUR_KEY\nwhalecli config show\n\nExit Codes\nCode\tMeaning\n0\tSuccess (alerts found or scan complete)\n1\tNo alerts (scan ran but nothing above threshold)\n2\tAPI error (rate limit, invalid key)\n3\tNetwork error (timeout, connection refused)\n4\tData error (invalid address, wallet not found)\nScoring Algorithm\n\n4-dimension whale scoring (0–100 points):\n\nNet Flow (0–40): USD net flow with log10 scaling, wallet age weighting\nVelocity (0–25): Current activity vs 30-day baseline (log2 ratio)\nCorrelation (0–20): Peer wallet direction agreement (min 2 peers)\nExchange Flow (0–15): CEX address registry lookup + direction match\n\nInterpretation:\n\n80–100: Strong whale signal (high confidence)\n60–79: Moderate activity (worth monitoring)\n40–59: Low activity (noise)\n0–39: Minimal (ignore)\nAgent Integration Pattern\nimport subprocess, json\n\ndef whale_scan(chain=\"ETH\", hours=4, threshold=70):\n    \"\"\"Run whale scan and return parsed results.\"\"\"\n    result = subprocess.run(\n        [\"whalecli\", \"scan\", \"--chain\", chain,\n         \"--hours\", str(hours), \"--threshold\", str(threshold),\n         \"--format\", \"json\"],\n        capture_output=True, text=True, timeout=30\n    )\n    if result.returncode == 2:\n        raise RuntimeError(f\"API error: {result.stderr}\")\n    if not result.stdout.strip():\n        return {\"wallets\": [], \"alerts_triggered\": 0}\n    return json.loads(result.stdout)\n\n# Example: pre-bet whale check\nscan = whale_scan(chain=\"ETH\", hours=4)\nif scan[\"summary\"][\"accumulating\"] > scan[\"summary\"][\"distributing\"]:\n    print(\"Whales accumulating — bullish signal\")\n\nFearHarvester Integration\n\nThe closed loop: Fear & Greed → Whale Signal → Simmer Bet\n\n# 1. Get F&G value\nfg_value = get_fear_greed_index()  # e.g., 8 (Extreme Fear)\n\n# 2. Check whale confirmation\nscan = whale_scan(chain=\"ETH\", hours=4)\nwhales_accumulating = scan[\"summary\"][\"accumulating\"] > scan[\"summary\"][\"distributing\"]\n\n# 3. If fear + whales accumulating → strong contrarian signal\nif fg_value <= 20 and whales_accumulating:\n    # Place bet on recovery market\n    place_simmer_bet(market=\"btc_recovery\", side=\"yes\", amount=15)\n\nSupported Chains\nETH — Etherscan API (free tier: 5 req/sec)\nBTC — Mempool.space (primary) + Blockchain.info (fallback)\nHL — Hyperliquid perpetual fills and positions\nLinks\nPyPI: https://pypi.org/project/whalecli/\nGitHub: https://github.com/clawinfra/whalecli\nIssues: https://github.com/clawinfra/whalecli/issues"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/bowen31337/whalecli",
    "publisherUrl": "https://clawhub.ai/bowen31337/whalecli",
    "owner": "bowen31337",
    "version": "0.1.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/whalecli",
    "downloadUrl": "https://openagent3.xyz/downloads/whalecli",
    "agentUrl": "https://openagent3.xyz/skills/whalecli/agent",
    "manifestUrl": "https://openagent3.xyz/skills/whalecli/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/whalecli/agent.md"
  }
}