Files
2026-07-13 12:36:12 +08:00

534 lines
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>TinyClaw — Installation Guide</title>
<link href="https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600;700&family=Familjen+Grotesk:wght@400;500;600;700;800&display=swap" rel="stylesheet">
<style>
:root {
--bg: #0a0c0f;
--surface: #111318;
--surface2: #181c24;
--border: #1f2733;
--accent: #ec4899;
--accent2: #f97316;
--green: #22d3a0;
--text: #e8edf5;
--muted: #5a6a7e;
--code-bg: #0d1117;
}
* { margin: 0; padding: 0; box-sizing: border-box; }
body {
background: var(--bg);
color: var(--text);
font-family: 'Familjen Grotesk', sans-serif;
min-height: 100vh;
padding: 48px 24px;
background-image:
radial-gradient(ellipse at 80% 0%, rgba(236,72,153,0.06) 0%, transparent 50%),
radial-gradient(ellipse at 0% 80%, rgba(249,115,22,0.04) 0%, transparent 50%);
}
.page { max-width: 860px; margin: 0 auto; }
/* Header */
.hero {
margin-bottom: 48px;
padding-bottom: 40px;
border-bottom: 1px solid var(--border);
position: relative;
}
.hero-tag {
display: inline-flex;
align-items: center;
gap: 8px;
background: rgba(236,72,153,0.1);
border: 1px solid rgba(236,72,153,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;
}
.hero-tag::before {
content: '';
width: 6px; height: 6px;
border-radius: 50%;
background: var(--accent);
animation: pulse 2s infinite;
}
@keyframes pulse {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
h1 {
font-size: 52px;
font-weight: 800;
letter-spacing: -2px;
line-height: 1;
margin-bottom: 12px;
}
h1 .claw { color: var(--accent); }
h1 .tiny { color: var(--text); }
.hero-sub {
font-size: 17px;
color: var(--muted);
font-weight: 500;
margin-bottom: 24px;
line-height: 1.5;
}
.badges {
display: flex;
flex-wrap: wrap;
gap: 10px;
}
.badge {
display: flex;
align-items: center;
gap: 6px;
background: var(--surface2);
border: 1px solid var(--border);
border-radius: 8px;
padding: 6px 12px;
font-family: 'JetBrains Mono', monospace;
font-size: 12px;
color: var(--muted);
}
.badge .dot { width: 6px; height: 6px; border-radius: 50%; }
/* Prereqs */
.prereq-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr));
gap: 12px;
margin-bottom: 40px;
}
.prereq-card {
background: var(--surface);
border: 1px solid var(--border);
border-radius: 10px;
padding: 16px;
display: flex;
align-items: center;
gap: 12px;
}
.prereq-icon {
width: 36px; height: 36px;
border-radius: 8px;
display: flex;
align-items: center;
justify-content: center;
font-size: 16px;
flex-shrink: 0;
}
.prereq-name { font-weight: 600; font-size: 14px; }
.prereq-note { font-size: 11px; color: var(--muted); margin-top: 2px; font-family: 'JetBrains Mono', monospace; }
/* Steps */
.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);
}
.step {
margin-bottom: 28px;
position: relative;
}
.step-header {
display: flex;
align-items: center;
gap: 14px;
margin-bottom: 14px;
}
.step-num {
width: 32px; height: 32px;
border-radius: 50%;
background: rgba(236,72,153,0.1);
border: 1.5px solid rgba(236,72,153,0.3);
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 blocks */
.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.02);
}
.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: #5a6a7e; }
.c-cmd { color: #22d3a0; }
.c-string { color: #f97316; }
.c-flag { color: #ec4899; }
.c-key { color: #a78bfa; }
/* Info box */
.info-box {
background: rgba(236,72,153,0.06);
border: 1px solid rgba(236,72,153,0.2);
border-radius: 10px;
padding: 16px 20px;
margin-left: 46px;
margin-top: 12px;
font-size: 13.5px;
color: #c4b5fd;
line-height: 1.6;
}
.info-box strong { color: var(--accent); }
/* Providers note */
.provider-row {
display: flex;
gap: 12px;
margin-left: 46px;
margin-top: 12px;
flex-wrap: wrap;
}
.provider-card {
flex: 1;
min-width: 200px;
background: var(--surface2);
border: 1px solid var(--border);
border-radius: 10px;
padding: 16px;
}
.provider-name {
font-weight: 700;
font-size: 15px;
margin-bottom: 6px;
display: flex;
align-items: center;
gap: 8px;
}
.provider-detail {
font-size: 12px;
color: var(--muted);
font-family: 'JetBrains Mono', monospace;
line-height: 1.6;
}
/* Config block */
.config-note {
background: var(--surface);
border: 1px solid var(--border);
border-left: 3px solid var(--green);
border-radius: 0 10px 10px 0;
padding: 14px 18px;
margin-left: 46px;
margin-top: 12px;
font-size: 13px;
color: var(--muted);
line-height: 1.6;
}
.config-note strong { color: var(--green); }
/* Footer */
.footer {
margin-top: 48px;
padding-top: 28px;
border-top: 1px solid var(--border);
display: flex;
align-items: center;
justify-content: space-between;
flex-wrap: gap;
}
.footer-note {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--muted);
}
.footer-link {
font-family: 'JetBrains Mono', monospace;
font-size: 11px;
color: var(--accent);
text-decoration: none;
}
</style>
</head>
<body>
<div class="page">
<!-- Hero -->
<div class="hero">
<div class="hero-tag">Installation Guide</div>
<h1><span class="tiny">Tiny</span><span class="claw">Claw</span> 🦞</h1>
<div class="hero-sub">Multi-agent · Multi-team · Multi-channel · 24/7 AI assistant<br>Run multiple teams of AI agents that collaborate simultaneously with isolated workspaces.</div>
<div class="badges">
<div class="badge"><div class="dot" style="background:#ec4899"></div>Multi-Agent</div>
<div class="badge"><div class="dot" style="background:#22d3a0"></div>TypeScript</div>
<div class="badge"><div class="dot" style="background:#f97316"></div>Node.js v18+</div>
<div class="badge"><div class="dot" style="background:#a78bfa"></div>Telegram · Discord · WhatsApp</div>
<div class="badge"><div class="dot" style="background:#3b82f6"></div>MIT License</div>
</div>
</div>
<!-- Prerequisites -->
<div class="section-title">Prerequisites</div>
<div class="prereq-grid">
<div class="prereq-card">
<div class="prereq-icon" style="background:rgba(34,211,160,0.1)">🟢</div>
<div>
<div class="prereq-name">Node.js</div>
<div class="prereq-note">v18 or higher</div>
</div>
</div>
<div class="prereq-card">
<div class="prereq-icon" style="background:rgba(236,72,153,0.1)">📟</div>
<div>
<div class="prereq-name">tmux</div>
<div class="prereq-note">for 24/7 operation</div>
</div>
</div>
<div class="prereq-card">
<div class="prereq-icon" style="background:rgba(249,115,22,0.1)">🔧</div>
<div>
<div class="prereq-name">jq + Bash 4.0+</div>
<div class="prereq-note">macOS: brew install bash</div>
</div>
</div>
<div class="prereq-card">
<div class="prereq-icon" style="background:rgba(167,139,250,0.1)">🤖</div>
<div>
<div class="prereq-name">Claude Code CLI</div>
<div class="prereq-note">or Codex CLI</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 TinyClaw</div>
</div>
<div class="step-desc">Choose one of three installation methods. One-line install is recommended.</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"># Option 1: One-line install (Recommended)</span>
<span class="c-cmd">curl</span> -fsSL https://raw.githubusercontent.com/jlia0/tinyclaw/main/scripts/remote-install.sh | bash
<span class="c-comment"># Option 2: From release tarball</span>
<span class="c-cmd">wget</span> https://github.com/jlia0/tinyclaw/releases/latest/download/tinyclaw-bundle.tar.gz
<span class="c-cmd">tar</span> -xzf tinyclaw-bundle.tar.gz
<span class="c-cmd">cd</span> tinyclaw && ./scripts/install.sh
<span class="c-comment"># Option 3: From source</span>
<span class="c-cmd">git clone</span> https://github.com/jlia0/tinyclaw.git
<span class="c-cmd">cd</span> tinyclaw && npm install && ./scripts/install.sh</pre>
</div>
</div>
<!-- Step 2 -->
<div class="step">
<div class="step-header">
<div class="step-num">2</div>
<div class="step-title">Install AI Provider CLI</div>
</div>
<div class="step-desc">TinyClaw requires either Claude Code CLI or Codex CLI — it does not support direct API keys or OpenRouter.</div>
<div class="provider-row">
<div class="provider-card">
<div class="provider-name" style="color:#ec4899">🟣 Anthropic (Claude)</div>
<div class="provider-detail">Install Claude Code CLI<br>authenticate with your<br>Anthropic account<br><br>Models: Sonnet, Opus</div>
</div>
<div class="provider-card">
<div class="provider-name" style="color:#22d3a0">🟢 OpenAI (Codex)</div>
<div class="provider-detail">Install Codex CLI<br>authenticate with your<br>OpenAI account<br><br>Models: gpt-5.3-codex</div>
</div>
</div>
</div>
<!-- Step 3 -->
<div class="step">
<div class="step-header">
<div class="step-num">3</div>
<div class="step-title">Run Setup Wizard</div>
</div>
<div class="step-desc">The interactive wizard walks you through channels, workspace, agents and provider selection.</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-cmd">tinyclaw start</span> <span class="c-comment"># Runs interactive setup wizard</span></pre>
</div>
<div class="config-note">Wizard covers: <strong>channel selection</strong> (Discord/WhatsApp/Telegram) · bot tokens · workspace name · default agent · AI provider · model · heartbeat interval</div>
</div>
<!-- Step 4 -->
<div class="step">
<div class="step-header">
<div class="step-num">4</div>
<div class="step-title">Configure Agents & Teams</div>
</div>
<div class="step-desc">Edit <code style="font-family:'JetBrains Mono',monospace;color:#ec4899;font-size:13px">.tinyclaw/settings.json</code> to define your agents and teams.</div>
<div class="code-block">
<div class="code-header">
<div class="code-lang">json · .tinyclaw/settings.json</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-key">"channels"</span>: {
<span class="c-key">"enabled"</span>: [<span class="c-string">"telegram"</span>, <span class="c-string">"discord"</span>],
<span class="c-key">"telegram"</span>: { <span class="c-key">"bot_token"</span>: <span class="c-string">"YOUR_TOKEN"</span> }
},
<span class="c-key">"agents"</span>: {
<span class="c-key">"coder"</span>: {
<span class="c-key">"name"</span>: <span class="c-string">"Code Assistant"</span>,
<span class="c-key">"provider"</span>: <span class="c-string">"anthropic"</span>,
<span class="c-key">"model"</span>: <span class="c-string">"sonnet"</span>
},
<span class="c-key">"writer"</span>: {
<span class="c-key">"name"</span>: <span class="c-string">"Technical Writer"</span>,
<span class="c-key">"provider"</span>: <span class="c-string">"anthropic"</span>,
<span class="c-key">"model"</span>: <span class="c-string">"sonnet"</span>
}
},
<span class="c-key">"teams"</span>: {
<span class="c-key">"dev"</span>: {
<span class="c-key">"name"</span>: <span class="c-string">"Dev Team"</span>,
<span class="c-key">"agents"</span>: [<span class="c-string">"coder"</span>, <span class="c-string">"writer"</span>],
<span class="c-key">"leader_agent"</span>: <span class="c-string">"coder"</span>
}
}
}</pre>
</div>
</div>
<!-- Step 5 -->
<div class="step">
<div class="step-header">
<div class="step-num">5</div>
<div class="step-title">Key Commands</div>
</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-cmd">tinyclaw start</span> <span class="c-comment"># Start daemon</span>
<span class="c-cmd">tinyclaw status</span> <span class="c-comment"># Check status</span>
<span class="c-cmd">tinyclaw agent list</span> <span class="c-comment"># List agents</span>
<span class="c-cmd">tinyclaw team visualize dev</span> <span class="c-comment"># Live TUI dashboard</span>
<span class="c-cmd">tinyclaw logs all</span> <span class="c-comment"># View all logs</span>
<span class="c-comment"># In-chat routing (Telegram/Discord/WhatsApp)</span>
<span class="c-string">@coder</span> fix the authentication bug <span class="c-comment"># Route to agent</span>
<span class="c-string">@dev</span> review this PR <span class="c-comment"># Route to team</span>
/agent <span class="c-comment"># List available agents</span></pre>
</div>
</div>
<div class="footer">
<div class="footer-note">github.com/jlia0/tinyclaw · MIT License · Experimental</div>
<div class="footer-note" style="color:#ec4899">#TinyClaw #MultiAgent #OpenClaw</div>
</div>
</div>
</body>
</html>