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.
Download the standalone native desktop application for offline privacy and local execution:
| Platform | Download Link | Type | Status |
|---|---|---|---|
| π macOS (Apple Silicon M1/M2/M3/M4) | β¬οΈ Download .dmg | Drag-and-Drop Disk Image (~11 MB) | Latest v1.3.2 |
| π macOS (Portable Archive) | β¬οΈ Download .zip | Standalone Application (~10 MB) | Latest v1.3.2 |
| πͺ Windows (10 / 11 64-bit) | β¬οΈ Download .exe / Install Script | NSIS Installer & PowerShell | Available |
| π§ Linux (Universal x86_64) | β¬οΈ Download .AppImage / Install Script | AppImage & DEB | Available |
π Prefer the web browser or full download portal? Visit the Desktop Download Portal or run instant NPX:
npx smoke-monkey-canvas
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 |
- πΊοΈ Infinite Canvas β drag, zoom, and organize agents spatially
- π€ Multi-Agent Orchestration β run dozens of agents simultaneously, each fully isolated
- π¬ Persistent Chat Sessions β multi-turn conversations survive page refreshes
- β° Cron Scheduling β schedule agents to run automatically on any cron expression
- π MCP Server Integration β attach any MCP server (Firecrawl, GitHub, Slack, Tavily, etc.) per agent
- π Skills Library β attach reusable skill documents to give agents domain expertise
- π Live Streaming β real-time text deltas, tool calls, and reasoning via WebSocket
- π Multi-Provider Support β NVIDIA, OpenAI, Anthropic, Gemini, Groq, DeepSeek, Ollama, and more
- ποΈ Zero-Native-Deps SQLite β uses Node.js built-in
node:sqlite(no native compile steps) - π¦ Fully Portable β copy the directory into any project and run it
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:
- User interacts with Canvas UI (React/Vite)
- REST calls β Express server β SQLite (agent config, chat history)
- Agent run β
AgentRunnerβsmoke-monkey-harnessβ LLM provider - Events stream back β WebSocket β UI live updates
Clone the repository and run the one-command installer for your platform:
git clone https://github.com/RajdeepDevelopment/smoke-monkey-canvas.git
cd smoke-monkey-canvas
./install-mac.shValidates Node.js & Rust, installs workspace dependencies, compiles the frontend bundle, packages the native macOS desktop app with signed permissions, and installs it directly into
/Applications/Smoke Monkey Canvas.app.
git clone https://github.com/RajdeepDevelopment/smoke-monkey-canvas.git
cd smoke-monkey-canvas
./install-linux.shChecks WebKitGTK/GUI dependencies, installs all packages, builds the web distribution, and compiles the native desktop binary.
git clone https://github.com/RajdeepDevelopment/smoke-monkey-canvas.git
cd smoke-monkey-canvas
powershell -ExecutionPolicy Bypass -File .\install-windows.ps1Or double-click
install-windows.batdirectly from File Explorer.
./install.shAutomatically detects your host OS (macOS, Linux, or Windows) and executes the matching platform installer.
Install globally once, then control your background Canvas from any terminal directory:
# 1. Install globally
npm install -g @smoke-monkey/canvas
# 2. Start Canvas as a background daemon (warp-cli style)
smoke-monkey start
# 3. Check status, port, and PID
smoke-monkey status
# 4. View live logs anytime
smoke-monkey logs -f
# 5. Open Web UI in browser
smoke-monkey open
# 6. Stop the background daemon
smoke-monkey stop(You can also use canvas or smoke-monkey-canvas as command aliases).
Run directly without installing:
# Start background daemon
npx @smoke-monkey/canvas start
# Check status
npx @smoke-monkey/canvas status
# Stop background daemon
npx @smoke-monkey/canvas stopPre-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:latestThen 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 downThe 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 releaseSupported platforms:
linux/amd64Β·linux/arm64(Apple Silicon native)
- Node.js β₯ 22.0.0 (required for
node:sqlitebuilt-in) - An API key for at least one LLM provider (e.g.,
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 buildnpm startCanvas is now running at http://localhost:3333 π
# Terminal 1 β start backend
npm start
# Terminal 2 β start frontend dev server
npm run dev:webFrontend dev server runs at http://localhost:5173 and proxies API/WS calls to the backend.
Deploy your personal, persistent multi-agent canvas to the cloud in under 60 seconds with verified 1-click templates:
| Cloud Provider | 1-Click Deployment Button | Configuration Blueprint | Database Persistence |
|---|---|---|---|
| DigitalOcean App Platform Container runtime with zero-ops management |
.do/deploy.template.yaml |
Official Docker Hub Image | |
| Render Managed web service with attached persistent SSD |
render.yaml |
Persistent Disk (/app/data) |
|
| Koyeb Serverless containers with worldwide edge routing |
Docker Hub Official | Port 3333 HTTP | |
| Railway Full infrastructure canvas with unmetered WebSockets |
.railway/railway.ts |
5 GB Persistent Volume |
π Need a complete walkthrough or custom VPS deployment?
Check our full interactive guide: docs/deploy.html
Production stack on any Linux VM with Docker (Caddy handles automatic TLS and the WebSocket upgrade):
cd deploy
cp .env.example .env # set SMOKE_DOMAIN to your hostname
docker compose -f docker-compose.vps.yml up -dEvery provider mounts a persistent volume at /app/data, which is where the SQLite database lives. Without it, agents and chat history are lost on every deploy.
API keys can be set two ways:
- Via the UI: Open any agent β Settings β Provider β paste key
- Via environment variables: Set before starting the server
# 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 |
- Click
+ New Agenton the canvas toolbar - Name your agent and select a model/provider
- Write a system prompt describing the agent's role
- (Optional) Attach MCP servers (e.g., Firecrawl for web research)
- (Optional) Attach skills from the library
- (Optional) Set a cron schedule (e.g.,
0 9 * * 1-5for weekday morning runs) - Click Run or type in the chat to start an interactive session
Each agent maintains:
- Multi-turn chat sessions β conversations persist across page refreshes
- Cron execution history β isolated from interactive chats, shown with
β° Cron Jobbadge - History tab filters β view
All,π¬ Chats, orβ° Cron Jobsseparately
The 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 startIt 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:
- β Free to use for personal projects, research, and internal business tooling
- β Free to modify and redistribute non-commercially
- β You may not offer Canvas as a commercial hosted service or SaaS product without a commercial license
- β You may not remove or obscure license notices
For commercial licensing, contact: rajdeep@smokemonkey.dev
We welcome contributions! Please read CONTRIBUTING.md before submitting a pull request.
- π Found a bug? β Open an issue
- π‘ Have an idea? β Request a feature
- π Security issue? β See SECURITY.md
| 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
