Technically, Charl is a cloud-native orchestration platform for OpenClaw agents. Psychologically, it is the end of "DevOps Anxiety."
"The best interface is no interface. The best configuration is a conversation."
Most AI agents are smart but helpless. They need you to configure environments, manage keys, and restart processes. Charl is different. It's a fleet of self-managing OpenClaw agents that live on the edge.
When you want to change something, you don't edit a config file. You just tell the agent:
You: "We've switched to the new Claude Sonnet model. Please update yourself." OpenClaw: "Consider it done."
And it happens. The agent updates its own state, persists it, and adapts instantly.
Charl is built on the Cloudflare Agents SDK, leveraging the power of Durable Objects for persistence and stateful autonomy.
- Charl (The Platform): A high-performance Worker that acts as the orchestrator.
- Registry Agent: The "Phonebook" of the system.
- Service Discovery: Automatically registers new agents.
- Real-time State: Uses WebSockets to sync fleet status to the dashboard instantly.
- Presence: Tracks agent heartbeats (Online/Offline status).
- OpenClaw Agents (The Workers):
- AI Brain: Powered by
gpt-4o(or compatible models). - Tool Use: Can schedule tasks, perform calculations, and browse the web.
- Sandbox: Optional integration with
Moltbotfor secure, sandboxed execution of complex code.
- AI Brain: Powered by
graph TD
classDef platform fill:#f48120,color:#fff,stroke:#333,stroke-width:2px;
classDef agent fill:#e1e1e1,color:#333,stroke:#333,stroke-width:1px;
classDef client fill:#f9fafb,color:#333,stroke:#333,stroke-width:1px;
User("User / Dashboard"):::client
subgraph Cloudflare_Worker ["☁️ Charl Worker"]
direction TB
Registry["📖 Registry Agent"]:::platform
subgraph Agents
A1["🦁 Agent: Research"]:::agent
A2["🦁 Agent: DevOps"]:::agent
end
end
User <-->|WebSocket| Registry
Registry <-->|JSRPC| A1
Registry <-->|JSRPC| A2
Deploy the entire platform to your Cloudflare account in seconds.
npm run deploynpm run deployAfter deployment, you must set the following secrets to avoid "WebSocket connection failed" errors:
# 1. Your OpenAI Key (Required)
npx wrangler secret put OPENAI_API_KEY
# 2. Development Mode (Recommended for first run)
# Skips strict Cloudflare Access checks
npx wrangler secret put DEV_MODE
# Value: true
# 3. Gateway Token (Random string)
npx wrangler secret put MOLTBOT_GATEWAY_TOKEN
# Value: any-random-stringVisit your deployed worker URL (e.g., https://charl.your-subdomain.workers.dev).
- Create Agents: Spin up new workers with a click.
- Monitor Fleet: See real-time status and heartbeats.
- Broadcast: Send system-wide commands to all agents.
For detailed guides on architecture, configuration, and API usage, visit the Docs page on your deployed instance at /docs.
Run the full stack locally:
npm run devThis starts the Worker, the Client (Vite), and the connection to Cloudflare services locally.
wrangler.jsonc: Cloudflare bindings and configuration..dev.vars: Local secrets (OPENAI_API_KEY, etc.).
MIT. Because freedom reduces friction.