Try OpenClaw in your browser in less than 3 seconds.
Boot a full OpenClaw agent sandbox, chat with it, then click through to a real-time gateway dashboard β all from the browser. No install, no Docker, no CLI.
π vibeclaw.dev Β· π Community
vibeclaw is two things:
-
π¦ Sandbox mode β Boot an OpenClaw agent right in your browser. A real Node.js container (powered by almostnode) loads the OpenClaw runtime, and you chat via free models through OpenRouter. No API keys needed.
-
π΄ Live Gateway mode β Connect to your running OpenClaw instance and get a full dashboard: sessions, agents, files, skills, cron jobs, metrics, presence, logs, and streaming chat.
- Go to vibeclaw.dev
- Pick a flavour from the dropdown
- Click βΆ Start Now
- Chat with the agent
- Click π΄ Connect β to open the gateway dashboard
- Start your OpenClaw gateway locally
- Open the Gateway Dashboard
- Enter your gateway URL and token
- See everything β all sessions, agents, workspace files, skills, cron jobs, cost tracking, and live logs
Flavours are swappable sandbox personalities. Each one defines its own agents, skills, teams, and system prompt. Pick one before booting β the entire sandbox (and gateway dashboard) adapts.
| Emoji | Name | Agents | Focus |
|---|---|---|---|
| π¦ | OpenClaw | 4 | Default coding assistant |
| π¦ | TinyClaw | 5 | Multi-agent orchestrator with team routing |
| π | ShipIt | 5 | DevOps β Docker, K8s, CI/CD, monitoring |
| π | R00t | 5 | Security β red/blue teams, pen testing, CTF |
| β¨ | Pixie | 5 | Creative studio β UI/UX, branding, animation |
| π | Professor | 4 | Education β teaching, exercises, mentoring |
Add a directory under vfs-flavours/ with a manifest.json:
{
"id": "my-flavour",
"name": "My Flavour",
"emoji": "π₯",
"version": "1.0.0",
"description": "What this flavour does",
"agents": [
{ "id": "main", "name": "Lead", "emoji": "π₯", "description": "The main agent" },
{ "id": "helper", "name": "Helper", "emoji": "π€", "description": "A helper agent" }
],
"teams": [
{ "id": "core", "name": "Core Team", "leader": "main", "agents": ["main", "helper"] }
],
"skills": [
{ "name": "my-skill", "emoji": "β‘", "description": "What it does" }
],
"systemPrompt": "You are π₯ My Flavour, a specialist in..."
}Then rebuild:
npm run flavours:buildββββββββββββββββββββββββββββββββββββββββββββββββββββ
β vibeclaw.dev β
ββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββ€
β π¦ Sandbox Mode β π΄ Live Gateway Mode β
β β β
β almostnode containerβ WebSocket to your β
β + OpenClaw VFS β OpenClaw gateway β
β + OpenRouter proxy β (JSON-RPC protocol v3) β
β + BroadcastChannel β β
β bridge to dash β Ed25519 auth via β
β β @noble/ed25519 β
ββββββββββββββββββββββββ΄ββββββββββββββββββββββββββββ€
β Gateway Dashboard β
β Sessions Β· Agents Β· Files Β· Skills Β· Cron β
β Metrics Β· Presence Β· Logs Β· Streaming Chat β
ββββββββββββββββββββββββββββββββββββββββββββββββββββ
When you boot a sandbox and click π΄ Connect β, the gateway dashboard opens in a new tab. Communication happens via BroadcastChannel (same-origin, cross-tab) β no server needed. The sandbox mimics a full OpenClaw gateway, responding to all dashboard API calls.
- almostnode β Browser-native Node.js runtime with virtual filesystem
- OpenClaw β AI agent framework with gateway protocol
- @noble/ed25519 β Pure JS Ed25519 for gateway auth (works on HTTP origins)
- OpenRouter β Free model access (server-proxied, no API key needed)
- Node.js 20+
git clone https://github.com/jasonkneen/vibeclaw.git
cd vibeclaw
npm installnpm run devOpens on http://localhost:5173 with hot reload.
npm run flavours:build # Build flavour index
npm run build # Production build| Script | Description |
|---|---|
npm run dev |
Start Vite dev server |
npm run build |
Production build |
npm run flavours:build |
Rebuild public/flavours.json from vfs-flavours/ |
npm run vfs:merge |
Merge vfs-extra/ files into VFS snapshot |
npm run openclaw:build |
Build OpenClaw VFS snapshot |
βββ index.html # Homepage + sandbox
βββ examples/
β βββ openclaw-gateway-demo.html # Full gateway dashboard
β βββ openclaw-connect-demo.html # Minimal connect demo
β βββ openclaw-client.js # Reusable WS client
β βββ shared-styles.css # Shared demo styles
βββ vfs-flavours/ # Flavour definitions
β βββ default/manifest.json # π¦ OpenClaw
β βββ tinyclaw/ # π¦ TinyClaw (full workspace)
β βββ devops/manifest.json # π ShipIt
β βββ hacker/manifest.json # π R00t
β βββ pixie/manifest.json # β¨ Pixie
β βββ professor/manifest.json # π Professor
βββ vfs-extra/ # Extra VFS files merged into snapshot
β βββ data/workspace/ # Agent workspace (SOUL.md, skills, docs)
βββ netlify/functions/
β βββ chat.mjs # Serverless OpenRouter proxy
βββ scripts/
β βββ build-flavours.mjs # Flavour index builder
β βββ build-vfs-extra.mjs # VFS merger
βββ public/
β βββ flavours.json # Built flavour index
βββ docs/ # Documentation pages
βββ src/ # almostnode runtime source
βββ dist/openclaw/ # Built OpenClaw VFS snapshot
vibeclaw.dev runs on Netlify:
- Static site build via Vite
- Serverless function at
/api/chatproxies to OpenRouter (API key stays server-side) - Custom domain:
vibeclaw.dev - COOP/COEP headers for SharedArrayBuffer support
| Variable | Where | Purpose |
|---|---|---|
OPENROUTER_API_KEY |
.env (dev) / Netlify env (prod) |
Server-side OpenRouter proxy |
The gateway dashboard communicates via WebSocket JSON-RPC:
// Request
{ type: "req", id: 1, method: "status", params: {} }
// Response
{ type: "res", id: 1, ok: true, payload: { ... } }
// Event (server push)
{ type: "event", event: "chat", payload: { state: "delta", message: { content: "..." } } }- WebSocket open β server sends
connect.challengeevent with nonce - Client signs nonce with Ed25519 β sends
connectrequest - Server responds with hello + session info
| Method | Description |
|---|---|
status |
Gateway status, session count, heartbeat config |
agents.list |
List all agents |
agent.identity.get |
Agent name, emoji, description |
sessions.list |
All sessions with token usage |
skills.status |
Available and active skills |
models.list |
Available models |
cron.list |
Scheduled jobs |
agents.files.list |
Workspace files |
agents.files.get |
File contents |
logs.tail |
Gateway log stream |
system-presence |
Connected nodes |
usage.cost |
Daily cost and token usage |
chat.send |
Send message (streams response via events) |
chat.history |
Session chat history |
- WebGPU local LLM β Qwen2.5-Coder 1.5B via WebLLM (~900MB, fully offline)
- More free models β as they appear on OpenRouter
- Flavour workspace loading β full VFS snapshots per flavour (not just manifest)
- Community flavours β submit your own via PR
- Live gateway relay β connect to remote gateways from any network
- almostnode β The browser-native Node.js runtime that makes this possible
- OpenClaw β The AI agent framework
- TinyClaw β Multi-agent orchestrator (inspiration for the TinyClaw flavour)
- OpenRouter β Free model API access
MIT β see LICENSE for details.
vibeclaw.dev Β· Built by @jasonkneen