Smoke Monkey Canvas β Visual multi-agent AI workspace on an infinite spatial canvas.
209
The visual, spatial multi-agent workspace for Smoke Monkey Harnessβ . Deploy, schedule, and chat with unlimited autonomous AI agents on an infinite canvas β all running locally with zero cloud lock-in.
Smoke Monkey Canvas is a standalone, portable visual workspace that lets you create, configure, and run multiple AI agents simultaneously on an infinite drag-and-drop canvas. Each agent has its own system prompt, model provider, cron schedule, MCP server integrations, skills library, working directory, and persistent multi-turn chat history.
It is built on top of smoke-monkey-harnessβ β the open-source TypeScript AI agent runtime β and adds a production-grade local UI to orchestrate it visually.
| Problem | Canvas Solution |
|---|---|
| Running agents one at a time in a terminal | Parallel agents on an infinite spatial canvas |
| Losing chat history on page refresh | Persistent multi-turn sessions per agent in SQLite |
| Cron jobs polluting interactive chat threads | Separate cron execution history with β° badge |
| No visual feedback during agent execution | Live streaming via WebSocket with tool call timeline |
| Hard-coded model providers | Swap providers (NVIDIA, OpenAI, Anthropic, Groq, etc.) per agent |
node:sqlite (no native compile steps)smoke-monkey-canvas/
βββ server/ # Express + WebSocket backend (TypeScript)
β βββ app.server.ts # Entry point, mounts all routers
β βββ features/
β βββ agent/ # Agent CRUD, runner, chat sessions, cron
β β βββ agent.server.ts # REST API routes
β β βββ agent.runner.ts # Harness execution engine
β β βββ agent.db.ts # SQLite queries (runs, sessions, messages)
β β βββ agent.cron.ts # Cron scheduler
β β βββ agent.types.ts # Shared type definitions
β βββ core/
β β βββ database.db.ts # Bootstrap, migrations, SQLite singleton
β β βββ ws.server.ts # WebSocket broadcast server
β βββ mcp/ # MCP server registry & stock MCPs
β βββ settings/ # API key management
β βββ skill/ # Skills library management
β βββ space/ # Canvas node positions
βββ web/ # React + Vite frontend
βββ src/features/
βββ agent/ # Agent drawer, chat UI, history tabs
βββ space/ # Canvas renderer, node components
βββ mcp/ # MCP configuration UI
Data flow:
AgentRunner β smoke-monkey-harness β LLM providerRun the Canvas immediately on any machine with Node.js β₯ 22:
# Start in foreground and automatically open browser
npx smoke-monkey-canvas
# Run continuously in background (daemon mode)
npx smoke-monkey-canvas --daemon
# Check background daemon status
npx smoke-monkey-canvas --status
# Stop background daemon
npx smoke-monkey-canvas --stop
# Run on a custom port
npx smoke-monkey-canvas --port 8080
Pre-built multi-arch image available on Docker Hub. Works on Mac (Intel & Apple Silicon), Linux, and Windows β no build step needed.
docker run -d \
--name smoke-monkey-canvas \
-p 3333:3333 \
-v smoke_canvas_data:/app/data \
rajdeepsadhu/smoke-monkey-canvas:latest
Then open http://localhost:3333β π
Includes the Canvas server and an optional dedicated PostgreSQL instance running on a unique port (15432) to ensure zero conflicts with existing local databases:
# 1. Start all services in the background
docker compose up -d
# 2. View running services and health status
docker compose ps
# 3. View live server logs
docker compose logs -f canvas
# 4. Stop all services
docker compose down
The Web UI is accessible at http://localhost:3333β , and SQLite database data is persisted automatically in the smoke_canvas_data volume.
# Pull the latest image manually
docker pull rajdeepsadhu/smoke-monkey-canvas:latest
# Run with a custom port
docker run -d -p 8080:3333 -v smoke_canvas_data:/app/data rajdeepsadhu/smoke-monkey-canvas:latest
# View logs
docker logs -f smoke-monkey-canvas
# Stop & remove
docker stop smoke-monkey-canvas && docker rm smoke-monkey-canvas
# Available tags
# latest β always the most recent stable build
# 1.0.0 β pinned release
Supported platforms:
linux/amd64Β·linux/arm64(Apple Silicon native)
node:sqlite built-in)NVIDIA_API_KEY, OPENAI_API_KEY)git clone https://github.com/RajdeepDevelopment/smoke-monkey-canvas.git
cd smoke-monkey-canvas
# Install dependencies and build web client
npm install
npm run build
npm start
Canvas is now running at http://localhost:3333β π
# Terminal 1 β start backend
npm start
# Terminal 2 β start frontend dev server
npm run dev:web
Frontend dev server runs at http://localhost:5173 and proxies API/WS calls to the backend.
API keys can be set two ways:
# Supported environment variable names
export NVIDIA_API_KEY=nvapi-...
export OPENAI_API_KEY=sk-...
export ANTHROPIC_API_KEY=sk-ant-...
export GEMINI_API_KEY=AIza...
export GROQ_API_KEY=gsk_...
export OPENROUTER_API_KEY=sk-or-...
export DEEPSEEK_API_KEY=sk-...
Keys set in the UI are stored encrypted in SQLite at ~/.smoke-monkey/canvas.db.
| Provider | Env Variable | Models |
|---|---|---|
| NVIDIA NIM | NVIDIA_API_KEY | nvidia/nemotron-3-super-120b, meta/llama-3.3-70b-instruct, etc. |
| OpenAI | OPENAI_API_KEY | gpt-4o, gpt-4o-mini, etc. |
| Anthropic | ANTHROPIC_API_KEY | claude-3-5-sonnet, claude-opus-4, etc. |
| Google Gemini | GEMINI_API_KEY | gemini-2.0-flash, gemini-2.5-pro, etc. |
| Groq | GROQ_API_KEY | llama-3.1-70b-versatile, etc. |
| DeepSeek | DEEPSEEK_API_KEY | deepseek-chat, deepseek-reasoner |
| Ollama | (no key) | Any local model |
+ New Agent on the canvas toolbar0 9 * * 1-5 for weekday morning runs)Each agent maintains:
β° Cron Job badgeAll, π¬ Chats, or β° Cron Jobs separatelyThe Session system uses SQLite (chat_sessions, chat_messages tables) so conversations are never lost, even if the server restarts.
The server exposes a REST API at http://localhost:3333/api:
| Method | Path | Description |
|---|---|---|
GET | /api/agents | List all agents |
POST | /api/agents | Create agent |
GET | /api/agents/:id | Get agent details |
PATCH | /api/agents/:id | Update agent config |
DELETE | /api/agents/:id | Delete agent |
POST | /api/agents/:id/run | Trigger manual run |
POST | /api/agents/:id/stop | Stop running agent |
GET | /api/agents/:id/runs | List runs (filterable by trigger_type) |
GET | /api/agents/runs/:runId | Get run details + events |
GET | /api/agents/:id/sessions | List chat sessions |
POST | /api/agents/:id/sessions | Create new session |
GET | /api/agents/:id/sessions/:sessionId/messages | Get session messages |
DELETE | /api/agents/:id/sessions/:sessionId | Delete session |
POST | /api/agents/:id/mcps | Attach MCP server |
DELETE | /api/agents/:id/mcps/:mcpId | Detach MCP server |
POST | /api/agents/:id/skills | Attach skill |
DELETE | /api/agents/:id/skills/:skillId | Detach skill |
WebSocket: Connect to ws://localhost:3333/ws for live agent events.
Canvas is fully portable. You can embed it inside another project:
# Copy or pull the canvas directory into your project
cp -r smoke-monkey-canvas ./my-project/canvas
cd ./my-project/canvas
npm install && npm --prefix web install && npm run build:web
npm start
It runs completely independently with its own SQLite database, web UI, and WebSocket server.
Smoke Monkey Canvas is released under the Sustainable Use License (SUL)β .
Summary:
For commercial licensing, contact: [email protected]β
We welcome contributions! Please read CONTRIBUTING.mdβ before submitting a pull request.
| Project | Description |
|---|---|
| smoke-monkey-harnessβ | The underlying AI agent runtime this is built on |
| @smoke-monkey/uiβ | The streaming chat UI component library |
Built with β€οΈ by RajdeepDevelopmentβ
Content type
Image
Digest
sha256:68693fa75β¦
Size
230.5 MB
Last updated
2 days ago
docker pull rajdeepsadhu/smoke-monkey-canvas