=== WHAT'S BEEN DONE (Recent) === MCP Pipeline Factory: - 38 MCP servers tracked across 7 pipeline stages - 31 servers at Stage 16 (Website Built) — ready to deploy - All 30 production servers patched to 100/100 protocol compliance - Built complete testing infra: mcp-jest, mcp-validator, mcp-add, MCP Inspector - 702 auto-generated test cases ready for live API testing - Autonomous pipeline operator system w/ 7 Discord channels + cron jobs - Dashboard live at 192.168.0.25:8888 (drag-drop kanban) CloseBot MCP: - 119 tools, 4,656 lines TypeScript, compiles clean - 14 modules (8 tool groups + 6 UI apps) GHL MCP: - Stage 11 (Edge Case Testing) — 42 failing tests identified Sub-agent _meta Labels: - All 643 tools across 5 MCPs tagged (GHL, Google Ads, Meta Ads, Google Console, Twilio) OpenClaw Upwork Launch: - 15 graphics, 6 mockups, 2 PDFs, 90-sec Remotion video - 3-tier pricing: $2,499 / $7,499 / $24,999 - First $20k deal closed + $2k/mo retainer (hospice) Other: - Surya Blender animation scripts (7 tracks) - Clawdbot architecture deep dive doc - Pipeline state.json updates === TO-DO (Open Items) === BLOCKERS: - [ ] GHL MCP: Fix 42 failing edge case tests (Stage 11) - [ ] Expired Anthropic API key in localbosses-app .env.local - [ ] Testing strategy decision: structural vs live API vs hybrid NEEDS API KEYS (can't progress without): - [ ] Meta Ads MCP — needs META_ADS_API_KEY for Stage 8→9 - [ ] Twilio MCP — needs TWILIO_API_KEY for Stage 8→9 - [ ] CloseBot MCP — needs CLOSEBOT_API_KEY for live testing - [ ] 702 test cases across all servers need live API credentials PIPELINE ADVANCEMENT: - [ ] Stage 7→8: CloseBot + Google Console need design approval - [ ] Stage 6→7: 22 servers need UI apps built - [ ] Stage 5→6: 5 servers need core tools built (FreshBooks, Gusto, Jobber, Keap, Lightspeed) - [ ] Stage 1→5: 3 new MCPs need scaffolding (Compliance GRC, HR People Ops, Product Analytics) PENDING REVIEW: - [ ] Jake review OpenClaw video + gallery → finalize Upwork listing - [ ] LocalBosses UI redesign (Steve Jobs critique delivered, recs available) QUEUED PROJECTS: - [ ] SongSense AI music analysis product (architecture done, build not started) - [ ] 8-Week Agent Study Plan execution (curriculum posted, Week 1 not started)
660 lines
19 KiB
Markdown
660 lines
19 KiB
Markdown
# 🦞 Clawdbot Architecture Deep Dive
|
|
|
|
> A comprehensive technical breakdown of Clawdbot's codebase, prompting system, and internal architecture.
|
|
|
|
---
|
|
|
|
## High-Level Overview
|
|
|
|
Clawdbot is a **TypeScript/Node.js application** (v22.12+) that acts as a universal gateway between messaging platforms and AI agents. Think of it as a sophisticated message router with an embedded AI brain.
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ MESSAGING CHANNELS │
|
|
│ Discord │ Telegram │ WhatsApp │ Signal │ iMessage │ Slack │
|
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ GATEWAY SERVER │
|
|
│ - WebSocket control plane (ws://127.0.0.1:18789) │
|
|
│ - HTTP server (control UI, Canvas, OpenAI-compat endpoints) │
|
|
│ - Session management │
|
|
│ - Cron scheduler │
|
|
│ - Node pairing (iOS/Android/macOS) │
|
|
└─────────────────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────────────────┐
|
|
│ AGENT LAYER │
|
|
│ - Pi coding agent (embedded via @mariozechner packages) │
|
|
│ - System prompt generation │
|
|
│ - Tool definitions & policy enforcement │
|
|
│ - Sub-agent spawning │
|
|
│ - Model routing (Anthropic, OpenAI, Gemini, Bedrock, etc.) │
|
|
└─────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## Directory Structure
|
|
|
|
```
|
|
/opt/homebrew/lib/node_modules/clawdbot/
|
|
├── dist/ # Compiled JavaScript (~800 files)
|
|
│ ├── agents/ # Agent runtime, tools, system prompt
|
|
│ ├── gateway/ # Gateway server implementation
|
|
│ ├── channels/ # Channel plugin system
|
|
│ ├── cli/ # CLI commands
|
|
│ ├── config/ # Configuration loading/validation
|
|
│ ├── browser/ # Playwright browser automation
|
|
│ ├── cron/ # Scheduled jobs
|
|
│ ├── memory/ # Semantic memory search
|
|
│ ├── sessions/ # Session management
|
|
│ ├── plugins/ # Plugin SDK
|
|
│ ├── infra/ # Infrastructure utilities
|
|
│ └── ...
|
|
├── docs/ # Documentation (~50 files)
|
|
├── skills/ # Built-in skills (~50 SKILL.md packages)
|
|
├── extensions/ # Channel extensions
|
|
├── assets/ # Static assets
|
|
└── package.json # Dependencies & scripts
|
|
```
|
|
|
|
---
|
|
|
|
## Core Components
|
|
|
|
### 1. Entry Point (`dist/entry.js`)
|
|
|
|
The CLI entry point that:
|
|
- Sets `process.title = "clawdbot"`
|
|
- Suppresses Node.js experimental warnings
|
|
- Handles Windows path normalization
|
|
- Loads CLI profiles
|
|
- Dispatches to `cli/run-main.js`
|
|
|
|
```javascript
|
|
#!/usr/bin/env node
|
|
process.title = "clawdbot";
|
|
installProcessWarningFilter();
|
|
|
|
// Handle profile args, then bootstrap CLI
|
|
import("./cli/run-main.js")
|
|
.then(({ runCli }) => runCli(process.argv))
|
|
```
|
|
|
|
### 2. Gateway Server (`dist/gateway/server.impl.js`)
|
|
|
|
The heart of Clawdbot — a single long-running process that owns:
|
|
|
|
| Subsystem | Purpose |
|
|
|-----------|---------|
|
|
| Config loader | Reads/validates `~/.clawdbot/clawdbot.yaml` |
|
|
| Plugin registry | Loads channel & tool plugins |
|
|
| Channel manager | Manages Discord/Telegram/WhatsApp connections |
|
|
| Session manager | Isolates conversations, tracks history |
|
|
| Cron service | Scheduled jobs & reminders |
|
|
| Node registry | Mobile/desktop node pairing |
|
|
| TLS runtime | Secure connections |
|
|
| Control UI | Browser dashboard at `:18789` |
|
|
| Health monitor | Gateway health & presence |
|
|
|
|
**Key Gateway Files:**
|
|
- `server-channels.js` — Channel connection lifecycle
|
|
- `server-chat.js` — Message → Agent routing
|
|
- `server-cron.js` — Scheduled jobs & reminders
|
|
- `server-bridge-*.js` — WebSocket control plane methods
|
|
- `server-http.js` — HTTP endpoints
|
|
- `server-providers.js` — Model provider management
|
|
|
|
### 3. Agent System (`dist/agents/`)
|
|
|
|
This is where the AI "brain" lives.
|
|
|
|
#### System Prompt Generation (`system-prompt.js`)
|
|
|
|
The `buildAgentSystemPrompt()` function dynamically constructs the system prompt based on runtime context:
|
|
|
|
```typescript
|
|
export function buildAgentSystemPrompt(params) {
|
|
// Sections built dynamically:
|
|
const lines = [
|
|
"You are a personal assistant running inside Clawdbot.",
|
|
"",
|
|
"## Tooling",
|
|
// ... tool availability list
|
|
"",
|
|
"## Tool Call Style",
|
|
// ... narration guidelines
|
|
"",
|
|
"## Clawdbot CLI Quick Reference",
|
|
// ... CLI commands
|
|
"",
|
|
...buildSkillsSection(params), // Available skills
|
|
...buildMemorySection(params), // Memory recall instructions
|
|
...buildDocsSection(params), // Documentation paths
|
|
...buildMessagingSection(params), // Messaging guidelines
|
|
...buildReplyTagsSection(params), // [[reply_to_current]] etc.
|
|
// ...
|
|
"## Runtime",
|
|
buildRuntimeLine(runtimeInfo), // Model, channel, capabilities
|
|
];
|
|
|
|
// Inject project context files
|
|
for (const file of contextFiles) {
|
|
lines.push(`## ${file.path}`, "", file.content, "");
|
|
}
|
|
|
|
return lines.filter(Boolean).join("\n");
|
|
}
|
|
```
|
|
|
|
**System Prompt Sections:**
|
|
|
|
| Section | Purpose |
|
|
|---------|---------|
|
|
| Tooling | Lists available tools with descriptions |
|
|
| Tool Call Style | When to narrate vs. just call tools |
|
|
| CLI Quick Reference | Gateway management commands |
|
|
| Skills | Available SKILL.md files to read |
|
|
| Memory Recall | How to use memory_search/memory_get |
|
|
| Self-Update | Config/update restrictions |
|
|
| Model Aliases | opus, sonnet shortcuts |
|
|
| Workspace | Working directory info |
|
|
| Documentation | Docs paths |
|
|
| Reply Tags | Native reply/quote syntax |
|
|
| Messaging | Channel routing rules |
|
|
| Silent Replies | NO_REPLY handling |
|
|
| Heartbeats | HEARTBEAT_OK protocol |
|
|
| Runtime | Model, channel, capabilities |
|
|
| Project Context | AGENTS.md, SOUL.md, USER.md, etc. |
|
|
|
|
The final prompt is **~2000-3000 tokens** depending on configuration.
|
|
|
|
#### Tools System (`dist/agents/tools/`)
|
|
|
|
Each tool is a separate module with schema definition and handler:
|
|
|
|
| Tool | File | Purpose |
|
|
|------|------|---------|
|
|
| `exec` | `bash-tools.exec.js` | Shell command execution (54KB!) |
|
|
| `process` | `bash-tools.process.js` | Background process management |
|
|
| `browser` | `browser-tool.js` | Playwright browser control |
|
|
| `canvas` | `canvas-tool.js` | Present/eval/snapshot Canvas |
|
|
| `cron` | `cron-tool.js` | Scheduled jobs & reminders |
|
|
| `gateway` | `gateway-tool.js` | Self-management (restart, update) |
|
|
| `message` | `message-tool.js` | Cross-channel messaging |
|
|
| `nodes` | `nodes-tool.js` | Mobile node camera/screen/location |
|
|
| `sessions_list` | `sessions-list-tool.js` | List sessions |
|
|
| `sessions_history` | `sessions-history-tool.js` | Fetch session history |
|
|
| `sessions_send` | `sessions-send-tool.js` | Send to another session |
|
|
| `sessions_spawn` | `sessions-spawn-tool.js` | Spawn sub-agent |
|
|
| `session_status` | `session-status-tool.js` | Usage/cost/model info |
|
|
| `agents_list` | `agents-list-tool.js` | List spawnable agents |
|
|
| `web_search` | `web-search.js` | Brave API search |
|
|
| `web_fetch` | `web-fetch.js` | URL content extraction |
|
|
| `image` | `image-tool.js` | Vision model analysis |
|
|
| `memory_search` | `memory-tool.js` | Semantic memory search |
|
|
| `memory_get` | `memory-tool.js` | Read memory snippets |
|
|
| `tts` | `tts-tool.js` | Text-to-speech |
|
|
|
|
**Tool Policy Enforcement (`pi-tools.policy.js`):**
|
|
|
|
Tools are filtered through multiple policy layers:
|
|
1. Global policy (`tools.policy` in config)
|
|
2. Provider-specific policy
|
|
3. Agent-specific policy
|
|
4. Group chat policy
|
|
5. Sandbox policy
|
|
6. Sub-agent policy
|
|
|
|
```typescript
|
|
const isAllowed = isToolAllowedByPolicies("exec", [
|
|
profilePolicy,
|
|
providerProfilePolicy,
|
|
globalPolicy,
|
|
globalProviderPolicy,
|
|
agentPolicy,
|
|
agentProviderPolicy,
|
|
groupPolicy,
|
|
sandbox?.tools,
|
|
subagentPolicy,
|
|
]);
|
|
```
|
|
|
|
#### Pi Integration (`dist/agents/pi-*.js`)
|
|
|
|
Clawdbot embeds [Pi coding agent](https://github.com/badlogic/pi-mono) as its core AI runtime:
|
|
|
|
```json
|
|
// Dependencies from package.json:
|
|
{
|
|
"@mariozechner/pi-agent-core": "0.49.3",
|
|
"@mariozechner/pi-ai": "0.49.3",
|
|
"@mariozechner/pi-coding-agent": "0.49.3",
|
|
"@mariozechner/pi-tui": "0.49.3"
|
|
}
|
|
```
|
|
|
|
**Key Pi Integration Files:**
|
|
|
|
| File | Purpose |
|
|
|------|---------|
|
|
| `pi-embedded-runner.js` | Spawns Pi agent sessions |
|
|
| `pi-embedded-subscribe.js` | Handles streaming responses |
|
|
| `pi-embedded-subscribe.handlers.*.js` | Message/tool event handlers |
|
|
| `pi-embedded-utils.js` | Utilities for Pi integration |
|
|
| `pi-tools.js` | Tool definition adapter |
|
|
| `pi-tools.policy.js` | Tool allowlist/denylist |
|
|
| `pi-tools.read.js` | Read tool customization |
|
|
| `pi-tools.schema.js` | Schema normalization |
|
|
| `pi-settings.js` | Pi agent settings |
|
|
|
|
### 4. Channel Plugins (`dist/channels/plugins/`)
|
|
|
|
Each messaging platform is a plugin:
|
|
|
|
```
|
|
channels/plugins/
|
|
├── discord/ # Discord.js integration
|
|
├── telegram/ # grammY framework
|
|
├── whatsapp/ # Baileys (WhatsApp Web protocol)
|
|
├── signal/ # Signal CLI bridge
|
|
├── imessage/ # macOS imsg CLI
|
|
├── bluebubbles/ # BlueBubbles API
|
|
├── slack/ # Slack Bolt
|
|
├── line/ # LINE Bot SDK
|
|
├── mattermost/ # WebSocket events
|
|
├── googlechat/ # Google Chat API
|
|
└── ...
|
|
```
|
|
|
|
**Channel Plugin Interface:**
|
|
Each plugin implements:
|
|
- `connect()` — Establish connection
|
|
- `disconnect()` — Clean shutdown
|
|
- `send()` — Deliver messages
|
|
- `onMessage()` — Handle incoming messages
|
|
- Channel-specific actions (reactions, polls, threads, etc.)
|
|
|
|
**Channel Registry (`dist/channels/registry.js`):**
|
|
```typescript
|
|
// Plugins register themselves
|
|
registerChannelPlugin({
|
|
id: "discord",
|
|
displayName: "Discord",
|
|
connect: async (config) => { ... },
|
|
send: async (message) => { ... },
|
|
// ...
|
|
});
|
|
```
|
|
|
|
### 5. Skills System (`skills/`)
|
|
|
|
Skills are self-contained instruction packages that teach the agent how to use external tools:
|
|
|
|
```
|
|
skills/
|
|
├── github/SKILL.md # gh CLI usage
|
|
├── gog/SKILL.md # Google Workspace CLI
|
|
├── spotify-player/SKILL.md # Spotify control
|
|
├── weather/SKILL.md # wttr.in integration
|
|
├── bear-notes/SKILL.md # Bear notes via grizzly
|
|
├── apple-notes/SKILL.md # memo CLI
|
|
├── apple-reminders/SKILL.md # remindctl CLI
|
|
├── obsidian/SKILL.md # Obsidian vault management
|
|
├── notion/SKILL.md # Notion API
|
|
├── himalaya/SKILL.md # Email via IMAP/SMTP
|
|
├── openhue/SKILL.md # Philips Hue control
|
|
├── camsnap/SKILL.md # RTSP camera capture
|
|
└── ...
|
|
```
|
|
|
|
**Skill Loading Flow:**
|
|
1. System prompt includes skill descriptions in `<available_skills>`
|
|
2. Agent scans descriptions to find matching skill
|
|
3. Agent calls `read` tool to load SKILL.md
|
|
4. Agent follows instructions in SKILL.md
|
|
|
|
**Skill File Structure:**
|
|
```markdown
|
|
# SKILL.md - [Tool Name]
|
|
|
|
## When to use
|
|
Description of when this skill applies.
|
|
|
|
## Commands
|
|
```bash
|
|
tool-name command --flags
|
|
```
|
|
|
|
## Examples
|
|
...
|
|
```
|
|
|
|
### 6. Memory System (`dist/memory/`)
|
|
|
|
Semantic search over workspace memory files:
|
|
|
|
**Memory Files:**
|
|
- `MEMORY.md` — Root memory file
|
|
- `memory/*.md` — Dated logs, research intel, project notes
|
|
|
|
**Memory Tools:**
|
|
- `memory_search` — Semantic vector search using `sqlite-vec`
|
|
- `memory_get` — Read specific lines from memory files
|
|
|
|
```typescript
|
|
// memory-search.js
|
|
import SqliteVec from "sqlite-vec";
|
|
|
|
async function searchMemory(query: string, options: SearchOptions) {
|
|
// Embed query
|
|
const embedding = await embedText(query);
|
|
|
|
// Vector similarity search
|
|
const results = await db.query(`
|
|
SELECT path, line_start, line_end, content,
|
|
vec_distance_cosine(embedding, ?) as distance
|
|
FROM memory_chunks
|
|
ORDER BY distance
|
|
LIMIT ?
|
|
`, [embedding, options.maxResults]);
|
|
|
|
return results;
|
|
}
|
|
```
|
|
|
|
### 7. Session Management (`dist/gateway/session-utils.js`)
|
|
|
|
Sessions isolate conversations and track state:
|
|
|
|
**Session Key Format:**
|
|
```
|
|
{channel}:{accountId}:{chatId}
|
|
discord:main:938238002528911400
|
|
telegram:main:123456789
|
|
whatsapp:main:1234567890@s.whatsapp.net
|
|
```
|
|
|
|
**Session State:**
|
|
- Conversation history
|
|
- Model override (if any)
|
|
- Reasoning level
|
|
- Active tool calls
|
|
- Sub-agent references
|
|
|
|
**Session Files:**
|
|
```
|
|
~/.clawdbot/sessions/
|
|
├── discord-main-938238002528911400.json
|
|
├── telegram-main-123456789.json
|
|
└── ...
|
|
```
|
|
|
|
---
|
|
|
|
## Message Flow
|
|
|
|
```
|
|
1. User sends message on Discord/Telegram/WhatsApp/etc.
|
|
│
|
|
▼
|
|
2. Channel plugin receives message
|
|
- Parses sender, chat ID, content
|
|
- Handles media attachments
|
|
- Checks mention gating (groups)
|
|
│
|
|
▼
|
|
3. Gateway routes to session
|
|
- Resolves session key
|
|
- Loads/creates session
|
|
- Checks activation rules
|
|
│
|
|
▼
|
|
4. Session loads context:
|
|
- System prompt (generated dynamically)
|
|
- Project context files (AGENTS.md, SOUL.md, USER.md)
|
|
- Conversation history
|
|
- Tool availability
|
|
│
|
|
▼
|
|
5. Pi agent processes with configured model
|
|
- Anthropic (Claude)
|
|
- OpenAI (GPT-4, o1, etc.)
|
|
- Google (Gemini)
|
|
- AWS Bedrock
|
|
- Local (Ollama, llama.cpp)
|
|
│
|
|
▼
|
|
6. Agent may call tools
|
|
- Tool policy checked
|
|
- Tool executed
|
|
- Results fed back to agent
|
|
- Loop until done
|
|
│
|
|
▼
|
|
7. Response streamed/chunked back
|
|
- Long responses chunked for Telegram
|
|
- Markdown formatted per channel
|
|
- Media attachments handled
|
|
│
|
|
▼
|
|
8. Channel plugin delivers message
|
|
- Native formatting applied
|
|
- Reply threading if requested
|
|
- Reactions/buttons if configured
|
|
```
|
|
|
|
---
|
|
|
|
## Configuration
|
|
|
|
Config lives at `~/.clawdbot/clawdbot.yaml`:
|
|
|
|
```yaml
|
|
# Model Providers
|
|
providers:
|
|
anthropic:
|
|
key: "sk-ant-..."
|
|
openai:
|
|
key: "sk-..."
|
|
google:
|
|
key: "..."
|
|
|
|
# Default Model
|
|
defaultModel: "anthropic/claude-sonnet-4-5"
|
|
|
|
# Channel Configs
|
|
discord:
|
|
token: "..."
|
|
defaultModel: "anthropic/claude-opus-4-5"
|
|
|
|
telegram:
|
|
token: "..."
|
|
|
|
whatsapp:
|
|
enabled: true
|
|
|
|
# Agent Config
|
|
agent:
|
|
workspaceDir: "~/.clawdbot/workspace"
|
|
|
|
agents:
|
|
main:
|
|
workspaceDir: "~/.clawdbot/workspace"
|
|
|
|
# Tool Policies
|
|
tools:
|
|
exec:
|
|
security: "full" # full | allowlist | deny
|
|
host: "sandbox" # sandbox | gateway | node
|
|
browser:
|
|
profile: "clawd"
|
|
|
|
# Cron Jobs
|
|
cron:
|
|
jobs:
|
|
- id: "daily-standup"
|
|
schedule: "0 9 * * *"
|
|
text: "Good morning! What's on the agenda?"
|
|
|
|
# Gateway Settings
|
|
gateway:
|
|
port: 18789
|
|
token: "..."
|
|
```
|
|
|
|
**Config Schema:**
|
|
Full schema at `dist/protocol.schema.json` (~80KB of JSON Schema)
|
|
|
|
---
|
|
|
|
## Key Dependencies
|
|
|
|
```json
|
|
{
|
|
// AI Agent Core
|
|
"@mariozechner/pi-agent-core": "0.49.3",
|
|
"@mariozechner/pi-ai": "0.49.3",
|
|
"@mariozechner/pi-coding-agent": "0.49.3",
|
|
|
|
// Messaging Channels
|
|
"discord-api-types": "^0.38.37",
|
|
"grammy": "^1.39.3",
|
|
"@whiskeysockets/baileys": "7.0.0-rc.9",
|
|
"@slack/bolt": "^4.6.0",
|
|
"@line/bot-sdk": "^10.6.0",
|
|
|
|
// Browser Automation
|
|
"playwright-core": "1.58.0",
|
|
"chromium-bidi": "13.0.1",
|
|
|
|
// Vector Search
|
|
"sqlite-vec": "0.1.7-alpha.2",
|
|
|
|
// Image Processing
|
|
"sharp": "^0.34.5",
|
|
"@napi-rs/canvas": "^0.1.88",
|
|
|
|
// TTS
|
|
"node-edge-tts": "^1.2.9",
|
|
|
|
// Scheduling
|
|
"croner": "^9.1.0",
|
|
|
|
// HTTP/WebSocket
|
|
"hono": "4.11.4",
|
|
"ws": "^8.19.0",
|
|
"undici": "^7.19.0",
|
|
|
|
// Schema Validation
|
|
"zod": "^4.3.6",
|
|
"@sinclair/typebox": "0.34.47",
|
|
"ajv": "^8.17.1"
|
|
}
|
|
```
|
|
|
|
---
|
|
|
|
## Key Architectural Decisions
|
|
|
|
### 1. Single Gateway Process
|
|
One process owns all channel connections to avoid session conflicts (especially WhatsApp Web which only allows one active session).
|
|
|
|
### 2. Pi as Core Runtime
|
|
Leverages Pi coding agent's battle-tested:
|
|
- Tool streaming
|
|
- Context management
|
|
- Multi-provider support
|
|
- Structured output handling
|
|
|
|
### 3. Dynamic System Prompt
|
|
Built at runtime based on:
|
|
- Available tools (policy-filtered)
|
|
- Available skills
|
|
- Current channel
|
|
- User configuration
|
|
- Project context files
|
|
|
|
### 4. Plugin Architecture
|
|
Everything is pluggable:
|
|
- Channels (Discord, Telegram, etc.)
|
|
- Tools (exec, browser, etc.)
|
|
- Hooks (voice transcription, media processing)
|
|
- Skills (external instruction packages)
|
|
|
|
### 5. Session Isolation
|
|
Each conversation gets isolated:
|
|
- History
|
|
- Model settings
|
|
- Tool state
|
|
- Sub-agent references
|
|
|
|
### 6. Sub-agent Spawning
|
|
Complex tasks spawn isolated sub-agents that:
|
|
- Run in separate sessions
|
|
- Have restricted tool access
|
|
- Report back when complete
|
|
- Can be monitored/killed
|
|
|
|
### 7. Multi-Layer Tool Policy
|
|
Security through depth:
|
|
- Global policy
|
|
- Provider policy
|
|
- Agent policy
|
|
- Group policy
|
|
- Sandbox policy
|
|
- Sub-agent policy
|
|
|
|
---
|
|
|
|
## File Counts
|
|
|
|
| Category | Count |
|
|
|----------|-------|
|
|
| Compiled JS files | ~800 |
|
|
| Documentation files | ~50 |
|
|
| Skill packages | ~50 |
|
|
| Channel plugins | ~12 |
|
|
| Tool implementations | ~25 |
|
|
|
|
**Total package size:** ~1.5MB (minified JS + assets)
|
|
|
|
---
|
|
|
|
## Development
|
|
|
|
```bash
|
|
# Clone and install
|
|
git clone https://github.com/clawdbot/clawdbot
|
|
cd clawdbot
|
|
pnpm install
|
|
|
|
# Build
|
|
pnpm build
|
|
|
|
# Run dev gateway
|
|
pnpm gateway:dev
|
|
|
|
# Run tests
|
|
pnpm test
|
|
|
|
# Lint
|
|
pnpm lint
|
|
```
|
|
|
|
---
|
|
|
|
## Resources
|
|
|
|
- **GitHub:** https://github.com/clawdbot/clawdbot
|
|
- **Docs:** https://docs.clawd.bot
|
|
- **Discord:** https://discord.com/invite/clawd
|
|
- **Skills Marketplace:** https://clawdhub.com
|
|
|
|
---
|
|
|
|
*Generated by Buba, 2026-02-06*
|