Skip to content

Releases: BlockRunAI/ClawRouter

v0.12.193 — Surf crypto-data API (skill-only)

17 May 13:17

Choose a tag to compare

  • Surf integration — first skill-only marketplace API. BlockRun launched the Surf unified crypto data API (blockrun.ai/marketplace/surf) — 84 endpoints across 13 domains: CEX/DEX markets, on-chain SQL over 80+ ClickHouse tables (Ethereum, Base, Arbitrum, BSC, TRON, HyperEVM, Tempo), 100M+ labeled wallets, prediction markets (Polymarket + Kalshi), social/CT mindshare, news, project/DeFi metrics, token analytics, unified search, VC fund intelligence. Settles directly to Surf's Base treasury in USDC; no Surf account or API key required.
  • New release pattern: base whitelist + skill, no typed wrappers. Earlier integrations (Predexon, Phone/Voice) wrote 200–400 lines of TypeScript per partner in src/partners/registry.ts — hand-authored summaries of each endpoint exposed as blockrun_* tools. That pattern doesn't scale: Surf alone has 84 endpoints, and the next BlockRun-marketplace API will have more. From this release forward, new partner APIs ship as a skill (markdown the agent reads on demand) plus a one-line addition to the proxy namespace whitelist. The agent reads skills/<api>/SKILL.md, crafts the HTTP call, and gets paid x402 settlement transparently. Adding a new Surf endpoint requires zero ClawRouter release. This matches the Anthropic Skills convention (github.com/anthropics/skills) and aligns with how Claude Code is designed to consume capability surfaces.
  • Proxy whitelist. Extended the partner-route regex at src/proxy.ts to match /v1/surf/*. Requests flow through the existing proxyPaidApiRequest (x402 handled transparently). New isSurf branch in the telemetry hook emits tier: "SURF" with model = "surf/<operation>" so clawrouter stats and clawrouter report see Surf usage as a distinct line — distinct from LLM, generic Partner, and Phone tiers. Updated proxyPaidApiRequest JSDoc + the inline route comment to document the new namespace.
  • No registry entries — no blockrun_surf_* tools. Deliberate. The agent reads skills/surf/SKILL.md for the endpoint catalog and crafts calls to http://127.0.0.1:8402/v1/surf/... directly. Skip the duplication.
  • skills/surf/SKILL.md (new). Full endpoint reference grouped by domain (Exchange, Market Overview, News, On-Chain, Prediction Markets, Project + DeFi, Social/CT, Token Analytics, Unified Search, VC Fund, Wallet Intelligence, Web, Chat). Pricing tier table ($0.001 / $0.005 / $0.020). Four worked example flows (wallet ID, token concentration, custom on-chain SQL with schema-fetch pattern, project mindshare lookup). Frontmatter triggers cover the natural-language queries an agent would phrase to find this skill ("onchain sql query", "wallet labels api", "crypto mindshare", etc.).
  • skills/clawrouter/SKILL.md headline update — per the feedback_skill_dual_layer rule. Added "Crypto Data (Surf) — skill-only integration" section after Prediction Markets, explaining the new base+skill pattern and pointing at the dedicated surf skill. Frontmatter description and triggers extended to surface Surf capabilities. Without this headline update, agents reasoning about crypto-data tasks would skip ClawRouter even with the dedicated surf skill present.
  • README — new "Crypto Data (Surf)" section between Phone & Voice and Models & Pricing, with the pricing table, three curl examples (price, batch wallet labels, on-chain SQL), and a link to skills/surf/SKILL.md. Notes that this is the new pattern for marketplace APIs.
  • openclaw.plugin.json description — mentions Surf so the OpenClaw plugin browser surfaces the capability.
  • Tests — new src/proxy.surf-routing.test.ts mirrors the partner-path regex literal and adds 10 assertions: positive matches for /v1/surf/{market/price,onchain/sql,wallet/labels/batch,prediction-market/polymarket/markets,chat/completions}, negative guards against /v1/surfer/*, /v1/surfaces/*, and bare /v1/surf (no trailing slash), plus regression guards for existing partner paths (/v1/pm/*, /v1/exa/*, /v1/phone/*, /v1/voice/*, /v1/stocks/*) and non-partner /v1 routes (/v1/chat/completions, /v1/models, /v1/images/generations). Mirroring the regex literal here means any silent regex edit fails loudly in CI.
  • Aborted course-correction in the same session (process note worth recording): the first pass of this integration also added 11 typed blockrun_surf_* tools to src/partners/registry.ts (~470 lines) and generalized the __dynamic__ handler in src/partners/tools.ts. Reverted both before commit on user feedback — Surf doesn't belong in registry.ts, and generalizing the dynamic handler without a second user would have been speculative. Lesson: mirroring the Predexon/Phone pattern by reflex skips the question of whether the pattern itself still scales. With Surf at 84 endpoints, it doesn't. New rule: typed partner wrappers are reserved for narrow, high-leverage APIs (≤12 endpoints, agent-facing tools that benefit from JSON-schema validation in OpenClaw). Everything else is base + skill.

v0.12.192

16 May 23:37

Choose a tag to compare

v0.12.192 — May 16, 2026

  • Phone & Voice integration — BlockRun's phone capability stack is now first-class in ClawRouter. BlockRun shipped 8 phone endpoints earlier this cycle (Twilio for number intelligence + provisioning, Bland.ai for AI-powered outbound voice calls), all x402-gated behind blockrun.ai/api/v1/phone/* and blockrun.ai/api/v1/voice/*. ClawRouter had zero integration — agents reasoning about phone tasks would skip ClawRouter entirely (per the feedback_skill_dual_layer rule: if skills/clawrouter/SKILL.md doesn't list a BlockRun capability, AI agents ignore the local proxy and hit the gateway directly, losing wallet/telemetry/local visibility). This release closes the gap on every surface.
  • Proxy paths. Extended the partner-route regex at src/proxy.ts:2782 to match /v1/phone/* and /v1/voice/*. Both flow through the existing proxyPaidApiRequest (x402 handled transparently). New isPhone branch in the telemetry hook emits tier: "PHONE" with model = phone/<operation> (so clawrouter stats and clawrouter report see phone usage as a distinct line). PHONE_PRICING table mirrors server-side twilio.ts + bland.ts pricing (longest-prefix match handles /voice/call/{id} poll URLs correctly) and is used only as the telemetry fallback when the x402 paymentStore is empty — actual settlement is always server-dictated.
  • Tool registry. Eight new entries in src/partners/registry.ts (PartnerCategory union extended with "Communications"):
    • blockrun_phone_lookup ($0.01) — carrier + line type
    • blockrun_phone_lookup_fraud ($0.05) — SIM-swap + call-forwarding signals
    • blockrun_phone_numbers_buy ($5.00 / 30 days) — provision a US/CA number tied to the wallet
    • blockrun_phone_numbers_renew ($5.00 / +30 days) — extend lease
    • blockrun_phone_numbers_list ($0.001) — wallet's active numbers
    • blockrun_phone_numbers_release (free) — release a number back to the pool
    • blockrun_voice_call ($0.54 flat, ≤30 min) — outbound AI voice call via Bland.ai
    • blockrun_voice_status (free) — poll call status / transcript / recording
    • Voice-call tool description carries an explicit safety guardrail: "places a REAL outbound phone call to a real number — only invoke when the user has explicitly asked." Server enforces an emergency-number blocklist; ClawRouter trusts upstream rather than duplicating the list.
  • /cr-call slash command in src/index.ts, registered alongside /cr-imagegen and /videogen. Syntax: /cr-call +1<E.164> "<task>" [--voice nat] [--max-duration 5] [--from +1<owned-number>] [--language en-US]. New parseCallArgs helper handles both --key=value and --key value flag forms, recognizes the first +E.164-shaped token as the destination, and packs the rest as the natural-language task. Mode is fire-and-forget: the command POSTs to /v1/voice/call, returns call_id + poll_url immediately, and tells the user to poll for transcript when the call completes. The cr- prefix is mandatory — /call and /phone are even more commonly reserved by chat platforms than /imagegen was when v0.12.190 had to rename it; we don't register either bare form.
  • clawrouter phone CLI subcommand in src/cli.ts covers the wallet-resource operations that don't make sense as chat slash commands:
    • clawrouter phone numbers list — formatted table with E.164, country, expiry-in-days, ⚠ renew soon flag for ≤2 days remaining
    • clawrouter phone numbers buy <US|CA> [--area-code <code>] — provision
    • clawrouter phone numbers renew <+E.164> — extend lease
    • clawrouter phone numbers release <+E.164> — release
    • clawrouter phone lookup <+E.164> — quick carrier check
    • clawrouter phone fraud <+E.164> — quick SIM-swap check
    • All subcommands POST to the running proxy at 127.0.0.1:8402; payment flows through the existing wallet. 402 errors render with a friendly "fund your wallet" hint.
  • SKILL.md double-layer update, per feedback_skill_dual_layer rule:
    • skills/clawrouter/SKILL.md — added "Phone & Voice (Twilio + Bland.ai)" section after Image & Video, with the full 8-tool table; updated frontmatter description and triggers to mention phone capabilities. Without this headline update, AI agents would route around ClawRouter when reasoning about phone tasks even with the partner registry populated — they need to see the capability surfaced where they're already looking.
    • skills/phone/SKILL.md (new) — dedicated reference: full HTTP API for each endpoint, parameter tables, fire-and-forget polling explanation, three example agentic flows (verify-before-text, appointment confirmation, acquire-caller-ID).
  • README — new "Phone & Voice Calls" section between Image Editing and Models & Pricing, with the pricing table, slash command + CLI examples, raw curl HTTP usage, and the same safety guardrail surfaced in the tool description.
  • openclaw.plugin.json description bump — mentions phone + voice capability so the OpenClaw plugin browser surfaces it.
  • Out of scope (deferred): local recording/transcript download (recordings can be large; returning Bland.ai's hosted URL is sufficient for v1), auto-polling voice-call status to completion in the slash command (user opted for fire-and-forget so the chat experience returns immediately), SMS/MMS (BlockRun hasn't exposed yet), auto-renew on lease expiry (CLI surfaces the warning, user decides).
  • Two telemetry bugs surfaced and fixed during real-call smoke testing (placed an actual $0.54 call to +15707043521 via the patched dist; tx 0xfe6c6b5e... settled on Base; wallet reconciliation correct: $84.49 → $83.95 = exactly one $0.54 debit). Both bugs were pure logging artifacts — wallet was never wrongly debited — but they would have given misleading numbers in clawrouter stats and clawrouter report. Both fixes consolidated into a new exported pure helper resolvePhoneTelemetryCost (in src/proxy.ts) with 8 unit tests locking down the gates:
    • Bug 1 — phantom $0.54 charge on 4xx voice POST. First smoke test POSTed /v1/voice/call with empty {} body to exercise routing without spending money. BlockRun returned 400 (Zod validation: "expected string, received undefined"). The wallet wasn't charged, but the telemetry hook saw paymentStore.amountUsd = 0 and fell back to estimatePhoneCost("/v1/voice/call") = $0.54. Stats would record a phantom voice call. Fix: gate the fallback on upstream.status being 2xx — any 4xx/5xx skips the fallback and logs $0.
    • Bug 2 — GET poll miscounted as another $0.54 voice call. After placing a real call, polling GET /v1/voice/call/{call_id} for transcript status (free upstream) was being logged at $0.54 because the longest-prefix match on voice/call/ triggered the same fallback row as the initiating POST. Every 30s poll would inflate stats by $0.54. Fix: also gate the fallback on req.method === "POST" — GET polls log $0.
    • Refactor: gate logic was originally inline inside proxyPaidApiRequest. Pulled it out into resolvePhoneTelemetryCost(args) so the rules are independently testable (the call site is now four lines passing an args bag through the helper). Adds 8 vitest cases covering: paid-amount-wins, 4xx phantom guard, GET poll guard, 5xx guard, missing-method guard, non-phone-passthrough, and the original "successful POST with empty paymentStore → fallback" path. Without the helper extraction, locking these gates in tests would have required a full integration test with a mocked upstream — too heavy for telemetry-only logic.
  • Tests — new src/proxy.phone-routing.test.ts (regex matching for /v1/phone/, /v1/voice/, /v1/voice/call/{id} poll, plus negative case for /v1/phonebook), src/proxy.phone-pricing.test.ts (longest-prefix matching + the 8 resolvePhoneTelemetryCost gate cases above), src/parse-call-args.test.ts (both flag forms, quoted task spans, E.164 first-token detection). Total 31 new test cases; all 569 vitest tests green; typecheck + lint clean.
  • Smoke test record (free-tier verification before the real call): list-numbers ($0.001) returned an existing wallet-owned number +15707043521 (PA, expires 2026-06-15); lookup ($0.01) on that same number returned full Twilio carrier metadata (type: nonFixedVoip, carrier_name: Twilio - SMS/MMS-SVR); negative test /v1/phonebook/test correctly rejected by the partner regex (502 from chat-completion fallback rather than partner routing); CLI table formatting + expiry-warning logic verified by clawrouter phone numbers list.

v0.12.190 — /imagegen → /cr-imagegen (Telegram collision fix)

13 May 05:56

Choose a tag to compare

Fix

Renames the /imagegen slash command to /cr-imagegen to resolve a collision with Telegram channel commands.

OpenClaw runtime previously emitted:

Plugin command "/imagegen" conflicts with an existing Telegram command

because Telegram channels reserve /imagegen for their own image-gen bots (HuggingFace Spaces et al.). The OpenClaw command registry can't claim the same prefix without inconsistent routing behavior in Telegram.

What changed

  • src/index.ts:1768api.registerCommand({ name: "imagegen" })name: "cr-imagegen"
  • src/proxy.ts:3472 — chat-prefix interceptor accepts both /cr-imagegen and /imagegen (backward compatibility for muscle memory; legacy form still works in chat)
  • README, docs/image-generation.md, skills/imagegen/SKILL.md updated to lead with /cr-imagegen and note the legacy form still works in chat
  • /videogen deliberately untouched — no field reports of collision

Migration

  • Slash command in Telegram/Discord/Slack picker: use /cr-imagegen (the new registered name)
  • Typing in chat: both /cr-imagegen <prompt> and /imagegen <prompt> continue to work

Install

npm install -g @blockrun/clawrouter@0.12.190

Closes #165.

v0.12.159

21 Apr 17:17
c24d03a

Choose a tag to compare

  • Market data tools — BlockRun gateway now exposes realtime and historical market data; ClawRouter wires them into OpenClaw as 6 first-class agent tools so the model stops scraping finance sites. Paid ($0.001 via x402, same wallet as LLM calls): blockrun_stock_price and blockrun_stock_history across 12 global equity markets (US, HK, JP, KR, UK, DE, FR, NL, IE, LU, CN, CA). Free (no x402 charge): blockrun_stock_list (ticker lookup / company-name search), blockrun_crypto_price (BTC-USD, ETH-USD, SOL-USD, …), blockrun_fx_price (EUR-USD, GBP-USD, JPY-USD, …), blockrun_commodity_price (XAU-USD gold, XAG-USD silver, XPT-USD platinum). Tool schemas advertise market codes, session hints (pre/post/on), and bar resolutions (1/5/15/60/240/D/W/M). Path routing extended: the partner-proxy whitelist in src/proxy.ts now matches /v1/(?:x|partner|pm|exa|modal|stocks|usstock|crypto|fx|commodity)/, routing all new paths through proxyPaidApiRequest (payFetch handles 402 when present, passes through 200 for free categories). Tool definitions added in src/partners/registry.ts; skills/clawrouter/SKILL.md gains a "Built-in Agent Tools" section listing market data + X intelligence + Polymarket alongside the LLM router.

v0.12.158

20 Apr 22:09
9803d5b

Choose a tag to compare

  • SKILL.md data-flow + key-storage transparency — second-pass fix for the OpenClaw scanner on clawhub.ai. v0.12.157 cleared the original scanner flags (opaque credentials, implied multi-provider keys, no install artifact). A deeper rescan surfaced three new nuanced flags: prompts go to blockrun.ai (data-privacy framing), wallet private-key storage location/encryption undocumented, and users may expect strictly-local routing. All three addressed: description reframed as "Hosted-gateway LLM router" with explicit Ollama pointer for local-only needs; new Data Flow section with ASCII diagram, enumerated sent/not-sent lists, link to https://blockrun.ai/privacy; new Credentials & Local Key Storage section documenting config file paths per OS, 0600 POSIX permissions, plaintext parity with other OpenClaw provider keys, encryption guidance (FileVault/LUKS/BitLocker or burner wallet), src/wallet.ts source pointer; new Supply-Chain Integrity section with npm pack verification and tagged-release invariant.

v0.12.157

20 Apr 21:43
aca5095

Choose a tag to compare

  • SKILL.md credential transparency — rewrote skills/clawrouter/SKILL.md to clear the OpenClaw scanner's medium-confidence suspicious verdict on clawhub.ai. Frontmatter now declares repository: https://github.com/BlockRunAI/ClawRouter, license: MIT, and a structured metadata.openclaw.install array (kind: node, package: @blockrun/clawrouter, bins: [clawrouter]) so the registry entry has an auditable install artifact instead of a bare bash block. Body adds a Credentials & Data Handling section fully enumerating what models.providers.blockrun stores (walletKey / solanaKey — auto-generated locally, never transmitted; gateway / routing — non-sensitive), and explicitly states the plugin does not collect or forward third-party provider API keys (OpenAI/Anthropic/Google/DeepSeek/xAI/NVIDIA) — the blockrun.ai gateway owns those relationships and routes on the server side. Addresses the three scanner flags (opaque credential declaration, implied multi-provider credential collection, no install artifact for review) raised against v0.12.156 on https://clawhub.ai/1bcmax/clawrouter.

v0.12.156

20 Apr 20:35
5c63fb2

Choose a tag to compare

v0.12.156 — Apr 20, 2026

  • Kimi K2.6 added — Moonshot's new flagship (moonshot/kimi-k2.6, 256K context, vision + reasoning, $0.95 in / $4.00 out per 1M) registered in BLOCKRUN_MODELS with kimi-k2.6 alias. Added to the curated /model picker list (src/index.ts, scripts/update.sh, scripts/reinstall.sh), the README pricing table, docs/routing-profiles.md, and the AI-agent-facing model catalog in skills/clawrouter/SKILL.md. Premium routing tier (blockrun/premium) now uses K2.6 as the SIMPLE primary and as a fallback in MEDIUM/COMPLEX, with nvidia/kimi-k2.5 retained as the first fallback for reliability. The generic kimi/moonshot aliases still resolve to nvidia/kimi-k2.5 (matches BlockRun server's blockrun/kimi stance); users opt in to K2.6 explicitly via kimi-k2.6 or blockrun/premium.
  • GitHub restored as canonical source — BlockRunAI GitHub org is back. package.json repository.url, README badges, CONTRIBUTING clone URL, openclaw.security.json, all docs (anthropic-*, clawrouter-cuts-*, clawrouter-vs-openrouter, 11-free-ai-models, llm-router-benchmark-*, smart-llm-router-14-dimension-classifier, subscription-failover, troubleshooting), skills/release/SKILL.md, and the sse-error-format regression-test comment now point at github.com/BlockRunAI/ClawRouter. GitLab mirror (gitlab.com/blockrunai/ClawRouter) is kept as a secondary remote for redundancy but is no longer advertised. Metadata + docs only; no runtime/code changes.