项目文件夹

文件
2026-07-13 12:36:12 +08:00

526 行
16 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ClawRouter — Installation Guide</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&family=Bricolage+Grotesque:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root {
--bg: #05080e;
--surface: #0c1018;
--surface2: #131820;
--border: #1c2535;
--accent: #f59e0b;
--accent2: #10b981;
--blue: #3b82f6;
--text: #e8edf5;
--muted: #4e6070;
--code-bg: #080c14;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Bricolage Grotesque', sans-serif;
min-height: 100vh;
padding: 48px 24px;
background-image:
radial-gradient(ellipse at 100% 0%, rgba(245,158,11,0.07) 0%, transparent 50%),
radial-gradient(ellipse at 0% 100%, rgba(16,185,129,0.04) 0%, transparent 50%);
}
.page { max-width: 860px; margin: 0 auto; }
/* Hero */
.hero {
margin-bottom: 48px;
padding-bottom: 40px;
border-bottom: 1px solid var(--border);
}
.hero-tag {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(245,158,11,0.1);
border: 1px solid rgba(245,158,11,0.25);
border-radius: 20px;
padding: 5px 14px;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--accent);
letter-spacing: 1px;
text-transform: uppercase;
margin-bottom: 20px;
}
h1 {
font-size: 52px;
font-weight: 800;
letter-spacing: -2px;
line-height: 1;
margin-bottom: 12px;
}
h1 .claw { color: var(--text); }
h1 .router { color: var(--accent); }
.hero-sub {
font-size: 17px;
color: var(--muted);
font-weight: 500;
margin-bottom: 24px;
line-height: 1.5;
}
.stat-row {
display: flex;
flex-wrap: wrap;
gap: 16px;
margin-bottom: 20px;
}
.stat {
background: var(--surface2);
border: 1px solid var(--border);
border-radius: 10px;
padding: 14px 20px;
display: flex;
flex-direction: column;
gap: 4px;
}
.stat-val {
font-size: 22px;
font-weight: 800;
letter-spacing: -0.5px;
color: var(--accent);
font-family: 'JetBrains Mono', monospace;
}
.stat-label {
font-size: 11px;
color: var(--muted);
text-transform: uppercase;
letter-spacing: 1px;
font-family: 'JetBrains Mono', monospace;
}
/* Section */
.section-title {
font-size: 11px;
font-family: 'JetBrains Mono', monospace;
letter-spacing: 3px;
text-transform: uppercase;
color: var(--muted);
margin-bottom: 20px;
display: flex;
align-items: center;
gap: 12px;
}
.section-title::after {
content: '';
flex: 1;
height: 1px;
background: var(--border);
}
/* Steps */
.step { margin-bottom: 32px; }
.step-header {
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 14px;
}
.step-num {
width: 32px; height: 32px;
border-radius: 50%;
background: rgba(245,158,11,0.1);
border: 1.5px solid rgba(245,158,11,0.35);
display: flex;
align-items: center;
justify-content: center;
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
font-weight: 700;
color: var(--accent);
flex-shrink: 0;
}
.step-title { font-size: 17px; font-weight: 700; letter-spacing: -0.3px; }
.step-desc {
font-size: 14px;
color: var(--muted);
margin-left: 46px;
margin-bottom: 14px;
line-height: 1.6;
}
/* Code */
.code-block {
background: var(--code-bg);
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
margin-left: 46px;
}
.code-header {
display: flex;
align-items: center;
justify-content: space-between;
padding: 10px 16px;
border-bottom: 1px solid var(--border);
background: rgba(255,255,255,0.015);
}
.code-lang {
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
letter-spacing: 2px;
text-transform: uppercase;
color: var(--muted);
}
.code-dots { display: flex; gap: 6px; }
.code-dots span { width: 8px; height: 8px; border-radius: 50%; }
pre {
padding: 20px;
font-family: 'JetBrains Mono', monospace;
font-size: 13px;
line-height: 1.7;
overflow-x: auto;
color: #cdd9e5;
}
.c-comment { color: #3d5166; }
.c-cmd { color: #10b981; }
.c-string { color: #f59e0b; }
.c-flag { color: #3b82f6; }
.c-key { color: #a78bfa; }
.c-num { color: #f97316; }
/* Routing table */
.routing-table {
margin-left: 46px;
margin-top: 14px;
border: 1px solid var(--border);
border-radius: 10px;
overflow: hidden;
}
.rt-header {
display: grid;
grid-template-columns: 1fr 2fr 1fr 1fr;
background: var(--surface2);
padding: 10px 16px;
border-bottom: 1px solid var(--border);
}
.rt-col {
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
letter-spacing: 1.5px;
text-transform: uppercase;
color: var(--muted);
}
.rt-row {
display: grid;
grid-template-columns: 1fr 2fr 1fr 1fr;
padding: 12px 16px;
border-bottom: 1px solid rgba(28,37,53,0.5);
font-size: 13px;
align-items: center;
}
.rt-row:last-child { border-bottom: none; }
.rt-row:hover { background: rgba(255,255,255,0.015); }
.profile-badge {
display: inline-block;
padding: 3px 10px;
border-radius: 6px;
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
font-weight: 700;
}
.savings { color: var(--accent2); font-family: 'JetBrains Mono', monospace; font-size: 12px; font-weight: 700; }
.model-name { font-family: 'JetBrains Mono', monospace; font-size: 12px; color: var(--muted); }
/* Wallet box */
.wallet-box {
margin-left: 46px;
margin-top: 14px;
background: rgba(245,158,11,0.06);
border: 1px solid rgba(245,158,11,0.2);
border-radius: 10px;
padding: 18px 20px;
}
.wallet-title {
font-weight: 700;
font-size: 14px;
color: var(--accent);
margin-bottom: 10px;
display: flex;
align-items: center;
gap: 8px;
}
.wallet-steps {
display: flex;
flex-direction: column;
gap: 8px;
}
.wallet-step {
display: flex;
align-items: flex-start;
gap: 10px;
font-size: 13px;
color: #94a3b8;
line-height: 1.5;
}
.ws-num {
width: 20px; height: 20px;
border-radius: 50%;
background: rgba(245,158,11,0.15);
border: 1px solid rgba(245,158,11,0.3);
display: flex;
align-items: center;
justify-content: center;
font-family: 'JetBrains Mono', monospace;
font-size: 10px;
color: var(--accent);
flex-shrink: 0;
margin-top: 1px;
}
/* vs box */
.vs-grid {
margin-left: 46px;
display: grid;
grid-template-columns: 1fr 1fr;
gap: 12px;
margin-top: 14px;
}
.vs-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 10px;
padding: 16px;
}
.vs-title { font-size: 13px; font-weight: 700; margin-bottom: 10px; color: var(--muted); }
.vs-item { font-size: 12px; color: var(--muted); margin-bottom: 6px; display: flex; gap: 8px; line-height: 1.4; }
.vs-item .check { color: var(--accent2); flex-shrink: 0; }
.vs-item .cross { color: #ef4444; flex-shrink: 0; }
/* Footer */
.footer {
margin-top: 48px;
padding-top: 28px;
border-top: 1px solid var(--border);
display: flex;
align-items: center;
justify-content: space-between;
}
.footer-note { font-family: 'JetBrains Mono', monospace; font-size: 11px; color: var(--muted); }
</style>
</head>
<body>
<div class="page">
<!-- Hero -->
<div class="hero">
<div class="hero-tag">Installation Guide</div>
<h1><span class="claw">Claw</span><span class="router">Router</span></h1>
<div class="hero-sub">The agent-native LLM router for OpenClaw<br>Route every request to the right model at the right price. 15-dimension scoring, &lt;1ms local routing.</div>
<div class="stat-row">
<div class="stat">
<div class="stat-val">&lt;1ms</div>
<div class="stat-label">Local Routing</div>
</div>
<div class="stat">
<div class="stat-val">30+</div>
<div class="stat-label">Models</div>
</div>
<div class="stat">
<div class="stat-val">92%</div>
<div class="stat-label">Cost Savings</div>
</div>
<div class="stat">
<div class="stat-val">$2.05</div>
<div class="stat-label">Blended /M tokens</div>
</div>
<div class="stat">
<div class="stat-val">0</div>
<div class="stat-label">API Keys Needed</div>
</div>
</div>
</div>
<!-- Steps -->
<div class="section-title">Installation Steps</div>
<!-- Step 1 -->
<div class="step">
<div class="step-header">
<div class="step-num">1</div>
<div class="step-title">Install ClawRouter</div>
</div>
<div class="step-desc">One command installs ClawRouter and restarts your OpenClaw gateway with smart routing enabled.</div>
<div class="code-block">
<div class="code-header">
<div class="code-lang">bash</div>
<div class="code-dots"><span style="background:#ff5f57"></span><span style="background:#febc2e"></span><span style="background:#28c840"></span></div>
</div>
<pre><span class="c-comment"># Install with smart routing enabled</span>
<span class="c-cmd">curl</span> -fsSL https://blockrun.ai/ClawRouter-update | bash
<span class="c-cmd">openclaw gateway restart</span>
<span class="c-comment"># Smart routing (blockrun/auto) is now your default model</span>
<span class="c-comment"># Your wallet address will be printed on install</span></pre>
</div>
</div>
<!-- Step 2 -->
<div class="step">
<div class="step-header">
<div class="step-num">2</div>
<div class="step-title">Fund Your Wallet</div>
</div>
<div class="step-desc">No account, no API key. Payment is authentication via x402 — non-custodial USDC on Base (L2).</div>
<div class="wallet-box">
<div class="wallet-title">💳 How the wallet works</div>
<div class="wallet-steps">
<div class="wallet-step"><div class="ws-num">1</div>Wallet auto-generated on Base L2 — saved at <code style="font-family:'JetBrains Mono',monospace;color:#f59e0b">~/.openclaw/blockrun/wallet.key</code></div>
<div class="wallet-step"><div class="ws-num">2</div>Fund with USDC on Base — $5 is enough for thousands of requests</div>
<div class="wallet-step"><div class="ws-num">3</div>Each request triggers a 402 response with price — your wallet signs and pays automatically</div>
<div class="wallet-step"><div class="ws-num">4</div>USDC stays in your wallet until spent — fully non-custodial, you hold your keys</div>
</div>
</div>
<div class="code-block" style="margin-top:12px">
<div class="code-header">
<div class="code-lang">bash · wallet commands</div>
<div class="code-dots"><span style="background:#ff5f57"></span><span style="background:#febc2e"></span><span style="background:#28c840"></span></div>
</div>
<pre>/wallet <span class="c-comment"># Check balance and address</span>
/stats <span class="c-comment"># View usage and savings</span></pre>
</div>
</div>
<!-- Step 3 -->
<div class="step">
<div class="step-header">
<div class="step-num">3</div>
<div class="step-title">Choose a Routing Profile</div>
</div>
<div class="step-desc">Switch profiles at any time with <code style="font-family:'JetBrains Mono',monospace;color:#f59e0b;font-size:13px">/model &lt;profile&gt;</code> in your chat.</div>
<div class="routing-table">
<div class="rt-header">
<div class="rt-col">Profile</div>
<div class="rt-col">Strategy</div>
<div class="rt-col">Savings</div>
<div class="rt-col">Best For</div>
</div>
<div class="rt-row">
<div><span class="profile-badge" style="background:rgba(59,130,246,0.15);color:#3b82f6">/model auto</span></div>
<div class="model-name">Balanced (default)</div>
<div class="savings">74–100%</div>
<div style="font-size:12px;color:var(--muted)">General use</div>
</div>
<div class="rt-row">
<div><span class="profile-badge" style="background:rgba(16,185,129,0.15);color:#10b981">/model eco</span></div>
<div class="model-name">Cheapest possible</div>
<div class="savings">95–100%</div>
<div style="font-size:12px;color:var(--muted)">Max savings</div>
</div>
<div class="rt-row">
<div><span class="profile-badge" style="background:rgba(245,158,11,0.15);color:#f59e0b">/model premium</span></div>
<div class="model-name">Best quality</div>
<div class="savings" style="color:var(--muted)">0%</div>
<div style="font-size:12px;color:var(--muted)">Mission-critical</div>
</div>
<div class="rt-row">
<div><span class="profile-badge" style="background:rgba(167,139,250,0.15);color:#a78bfa">/model free</span></div>
<div class="model-name">Free tier only</div>
<div class="savings">100%</div>
<div style="font-size:12px;color:var(--muted)">Zero cost</div>
</div>
</div>
</div>
<!-- Step 4 -->
<div class="step">
<div class="step-header">
<div class="step-num">4</div>
<div class="step-title">Model Shortcuts</div>
</div>
<div class="step-desc">Direct model shortcuts available alongside routing profiles.</div>
<div class="code-block">
<div class="code-header">
<div class="code-lang">bash · in-chat commands</div>
<div class="code-dots"><span style="background:#ff5f57"></span><span style="background:#febc2e"></span><span style="background:#28c840"></span></div>
</div>
<pre>/model grok <span class="c-comment"># grok-4-fast</span>
/model br-sonnet <span class="c-comment"># claude-sonnet-4 via ClawRouter</span>
/model gpt5 <span class="c-comment"># gpt-5.2-codex</span>
/model o3 <span class="c-comment"># o3 reasoning model</span>
/model auto <span class="c-comment"># back to smart routing</span>
/model free <span class="c-comment"># gpt-oss-120b (FREE fallback)</span></pre>
</div>
</div>
<!-- Step 5 -->
<div class="step">
<div class="step-header">
<div class="step-num">5</div>
<div class="step-title">ClawRouter vs OpenRouter</div>
</div>
<div class="vs-grid">
<div class="vs-card">
<div class="vs-title" style="color:var(--muted)">OpenRouter / LiteLLM</div>
<div class="vs-item"><span class="cross"></span> Human creates account</div>
<div class="vs-item"><span class="cross"></span> API key (shared secret)</div>
<div class="vs-item"><span class="cross"></span> Prepaid balance (custodial)</div>
<div class="vs-item"><span class="cross"></span> Proprietary routing</div>
<div class="vs-item"><span class="cross"></span> Per-key rate limits</div>
<div class="vs-item"><span class="cross"></span> ~$25/M (Opus equivalent)</div>
</div>
<div class="vs-card" style="border-color:rgba(245,158,11,0.25)">
<div class="vs-title" style="color:var(--accent)">ClawRouter ⚡</div>
<div class="vs-item"><span class="check"></span> Agent generates wallet</div>
<div class="vs-item"><span class="check"></span> Wallet signature (cryptographic)</div>
<div class="vs-item"><span class="check"></span> Per-request (non-custodial)</div>
<div class="vs-item"><span class="check"></span> Open source, client-side</div>
<div class="vs-item"><span class="check"></span> No rate limits</div>
<div class="vs-item"><span class="check"></span> $2.05/M blended average</div>
</div>
</div>
</div>
<div class="footer">
<div class="footer-note">github.com/BlockRunAI/ClawRouter · blockrun.ai</div>
<div class="footer-note" style="color:var(--accent)">#ClawRouter #OpenClaw #LocalAI</div>
</div>
</div>
</body>
</html>