clawbridge-agent
v2.3.1
Published
AI agent platform for ClawBridge Agency. Self-hosted, secure, customizable.
Downloads
3,265
Maintainers
Readme
Why I Built ClawBridge
OpenClaw is an impressive project, but I wouldn't have been able to sleep if I had given complex software I didn't understand full access to my life. OpenClaw has nearly half a million lines of code, 53 config files, and 70+ dependencies. Its security is at the application level (allowlists, pairing codes) rather than true OS-level isolation. Everything runs in one Node process with shared memory.
ClawBridge provides that same core functionality, but in a codebase small enough to understand: one process and a handful of files. Claude agents run in their own Linux containers with filesystem isolation, not merely behind permission checks.
Quick Start
npx clawbridge-agent setupThe interactive wizard walks you through fresh install or migration from OpenClaw/NanoClaw in minutes.
Or migrate from an existing install:
npx clawbridge-agent setup --migrateFrom a local checkout:
git clone https://github.com/other2368-byte/clawbridge-agent.git clawbridge-v2
cd clawbridge-v2
pnpm run setup:wizardclawbridge.sh is also available for automated/scripted installs:
bash clawbridge.shclawbridge.sh walks you from a fresh machine to a named agent you can message. It installs Node, pnpm, and Docker if missing, writes your Claude credential to ~/.clawbridge/.env, builds the agent container, and pairs your first channel (Telegram, Discord, WhatsApp, or a local CLI). If a step fails, Claude Code is invoked automatically to diagnose and resume from where it broke.
Features
- 🤖 Multi-channel AI agents (Telegram, WhatsApp, Discord, Slack, iMessage, 15+ more)
- 🔌 700+ integrations via Nango (Google, HubSpot, Slack…)
- 📊 Client portal with analytics & ROI dashboard
- 📞 Voice agents via Retell AI
- 👁 Vision & document analysis via Claude
- 🔒 Container-isolated, self-hosted — your data stays yours
- 🚀 Migrate from OpenClaw or NanoClaw/Cyndra in minutes
Architecture
messaging apps → host process (router) → inbound.db → container (Bun, Claude Agent SDK) → outbound.db → host process (delivery) → messaging appsA single Node host orchestrates per-session agent containers. Agents run in Docker with explicit filesystem mounts. Credentials are injected directly from ~/.clawbridge/.env into container environment variables at spawn time. See docs/architecture.md for the full writeup.
Philosophy
Small enough to understand. One process, a few source files and no microservices. If you want to understand the full ClawBridge codebase, just ask Claude Code to walk you through it.
Secure by isolation. Agents run in Linux containers and they can only see what's explicitly mounted. Bash access is safe because commands run inside the container, not on your host.
Built for the individual user. ClawBridge isn't a monolithic framework; it's software that fits each user's exact needs. Instead of becoming bloatware, ClawBridge is designed to be bespoke. You make your own fork and have Claude Code modify it to match your needs.
Customization = code changes. No configuration sprawl. Want different behavior? Modify the code. The codebase is small enough that it's safe to make changes.
AI-native, hybrid by design. The install and onboarding flow is an optimized scripted path, fast and deterministic. When a step needs judgment, whether a failed install, a guided decision, or a customization, control hands off to Claude Code seamlessly. Beyond setup there's no monitoring dashboard or debugging UI either: describe the problem in chat and Claude Code handles it.
Skills over features. Trunk ships the registry and infrastructure, not specific channel adapters or alternative agent providers. Channels (Discord, Slack, Telegram, WhatsApp, …) live on a long-lived channels branch; alternative providers (OpenCode, Ollama) live on providers. You run /add-telegram, /add-opencode, etc. and the skill copies exactly the module(s) you need into your fork. No feature you didn't ask for.
Best harness, best model. ClawBridge natively uses Claude Code via Anthropic's official Claude Agent SDK, so you get the latest Claude models and Claude Code's full toolset, including the ability to modify and expand your own ClawBridge fork. Other providers are drop-in options: /add-codex for OpenAI's Codex (ChatGPT subscription or API key), /add-opencode for OpenRouter, Google, DeepSeek and more via OpenCode, and /add-ollama-provider for local open-weight models. Provider is configurable per agent group.
What It Supports
- Multi-channel messaging — WhatsApp, Telegram, Discord, Slack, Microsoft Teams, iMessage, Matrix, Google Chat, Webex, Linear, GitHub, WeChat, and email via Resend. Installed on demand with
/add-<channel>skills. Run one or many at the same time. - Flexible isolation — connect each channel to its own agent for full privacy, share one agent across many channels for unified memory with separate conversations, or fold multiple channels into a single shared session so one conversation spans many surfaces. Pick per channel via
/manage-channels. See docs/isolation-model.md. - Per-agent workspace — each agent group has its own
CLAUDE.local.mdpersona, its own memory, its own container, and only the mounts you allow. Nothing crosses the boundary unless you wire it to. - Scheduled tasks — recurring jobs that run Claude and can message you back
- Web access — search and fetch content from the web
- Container isolation — agents are sandboxed in Docker (macOS/Linux/WSL2), with optional Docker Sandboxes micro-VM isolation or Apple Container as a macOS-native opt-in
- Credential security — agents never hold raw API keys. Outbound requests route through OneCLI's Agent Vault, which injects credentials at request time and enforces per-agent policies and rate limits.
Usage
Talk to your assistant with the trigger word (default: @Andy):
@Andy send an overview of the sales pipeline every weekday morning at 9am (has access to my Obsidian vault folder)
@Andy review the git history for the past week each Friday and update the README if there's drift
@Andy every Monday at 8am, compile news on AI developments from Hacker News and TechCrunch and message me a briefingFrom a channel you own or administer, you can manage groups and tasks:
@Andy list all scheduled tasks across groups
@Andy pause the Monday briefing task
@Andy join the Family Chat groupCustomizing your agent
Edit ~/.clawbridge/groups/main/CLAUDE.local.md to customize your agent's persona.
This is the only file you need to touch — the system configuration is managed automatically.
The file is created with a default template on first run. Open it and change anything:
- Agent name and personality
- Background knowledge about you or your team
- Behavioral preferences and response style
The system-managed _composed.md (underscore prefix = internal, do not edit) is regenerated
on every container spawn from shared base instructions and skill fragments. Your edits in
CLAUDE.local.md are merged alongside it automatically.
Customizing
ClawBridge doesn't use configuration files. To make changes, just tell Claude Code what you want:
- "Change the trigger word to @Bob"
- "Remember in the future to make responses shorter and more direct"
- "Add a custom greeting when I say good morning"
- "Store conversation summaries weekly"
Or run /customize for guided changes.
The codebase is small enough that Claude can safely modify it.
Contributing
Don't add features. Add skills.
If you want to add a new channel or agent provider, don't add it to trunk. New channel adapters land on the channels branch; new agent providers land on providers. Users install them in their own fork with /add-<name> skills, which copy the relevant module(s) into the standard paths, wire the registration, and pin dependencies.
This keeps trunk as pure registry and infra, and every fork stays lean — users get the channels and providers they asked for and nothing else.
RFS (Request for Skills)
Skills we'd like to see:
Communication Channels
/add-signal— Add Signal as a channel
Requirements
- macOS or Linux (Windows via WSL2)
- Node.js 20+ and pnpm 10+ (the installer will install both if missing)
- Docker Desktop (macOS/Windows) or Docker Engine (Linux)
- Claude Code for
/customize,/debug, error recovery during setup, and all/add-<channel>skills
Architecture
messaging apps → host process (router) → inbound.db → container (Bun, Claude Agent SDK) → outbound.db → host process (delivery) → messaging appsA single Node host orchestrates per-session agent containers. When a message arrives, the host routes it via the entity model (user → messaging group → agent group → session), writes it to the session's inbound.db, and wakes the container. The agent-runner inside the container polls inbound.db, runs Claude, and writes responses to outbound.db. The host polls outbound.db and delivers back through the channel adapter.
Two SQLite files per session, each with exactly one writer — no cross-mount contention, no IPC, no stdin piping. Channels and alternative providers self-register at startup; trunk ships the registry and the Chat SDK bridge, while the adapters themselves are skill-installed per fork.
For the full architecture writeup see docs/architecture.md; for the three-level isolation model see docs/isolation-model.md.
Key files:
src/index.ts— entry point: DB init, channel adapters, delivery polls, sweepsrc/router.ts— inbound routing: messaging group → agent group → session →inbound.dbsrc/delivery.ts— pollsoutbound.db, delivers via adapter, handles system actionssrc/host-sweep.ts— 60s sweep: stale detection, due-message wake, recurrencesrc/session-manager.ts— resolves sessions, opensinbound.db/outbound.dbsrc/container-runner.ts— spawns per-agent-group containers, OneCLI credential injectionsrc/db/— central DB (users, roles, agent groups, messaging groups, wiring, migrations)src/channels/— channel adapter infra (adapters installed via/add-<channel>skills)src/providers/— host-side provider config (claudebaked in; others via skills)container/agent-runner/— Bun agent-runner: poll loop, MCP tools, provider abstractiongroups/<folder>/— per-agent-group filesystem (CLAUDE.local.mdpersona,_composed.mdsystem entry point, skills, container config)
FAQ
Why Docker?
Docker provides cross-platform support (macOS, Linux and Windows via WSL2) and a mature ecosystem. On macOS, you can optionally switch to Apple Container via /convert-to-apple-container for a lighter-weight native runtime. For additional isolation, Docker Sandboxes run each container inside a micro VM.
Can I run this on Linux or Windows?
Yes. Docker is the default runtime and works on macOS, Linux, and Windows (via WSL2). Just run bash clawbridge.sh.
Is this secure?
Agents run in containers, not behind application-level permission checks. They can only access explicitly mounted directories. Credentials never enter the container — outbound API requests route through OneCLI's Agent Vault, which injects authentication at the proxy level and supports rate limits and access policies. You should still review what you're running, but the codebase is small enough that you actually can. See the security documentation for the full security model.
Why no configuration files?
We don't want configuration sprawl. Every user should customize ClawBridge so that the code does exactly what they want, rather than configuring a generic system. If you prefer having config files, you can tell Claude to add them.
Can I use third-party or open-source models?
Yes. The supported path is /add-opencode (OpenRouter, OpenAI, Google, DeepSeek, and more via OpenCode config) or /add-ollama-provider (local open-weight models via Ollama). Both are configurable per agent group, so different agents can run on different backends in the same install.
For one-off experiments, any Claude API-compatible endpoint also works via .env:
ANTHROPIC_BASE_URL=https://your-api-endpoint.com
ANTHROPIC_AUTH_TOKEN=your-token-hereHow do I debug issues?
Ask Claude Code. "Why isn't the scheduler running?" "What's in the recent logs?" "Why did this message not get a response?" That's the AI-native approach that underlies ClawBridge.
Why isn't the setup working for me?
If a step fails, clawbridge.sh hands off to Claude Code to diagnose and resume. If that doesn't resolve it, run claude, then /debug. If Claude identifies an issue likely to affect other users, open a PR against the relevant setup step or skill.
What changes will be accepted into the codebase?
Only security fixes, bug fixes, and clear improvements will be accepted to the base configuration. That's all.
Everything else (new capabilities, OS compatibility, hardware support, enhancements) should be contributed as skills on the channels or providers branch.
This keeps the base system minimal and lets every user customize their installation without inheriting features they don't want.
Community
Questions? Ideas? Join the Discord.
Changelog
See CHANGELOG.md for breaking changes, or the full release history on the documentation site.
License
MIT
