Sign inSign up

rajdeepsadhu/smoke-monkey-canvas

By rajdeepsadhu

β€’Updated 2 days ago

Smoke Monkey Canvas β€” Visual multi-agent AI workspace on an infinite spatial canvas.

Image
1

209

rajdeepsadhu/smoke-monkey-canvas repository overview

⁠Smoke Monkey Canvas πŸ’

Smoke Monkey Canvas β€” Spatial Multi-Agent Workspace

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.

Version License Node.js TypeScript npm Docker Hub


⁠What is 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.

⁠Why Canvas?
ProblemCanvas Solution
Running agents one at a time in a terminalParallel agents on an infinite spatial canvas
Losing chat history on page refreshPersistent multi-turn sessions per agent in SQLite
Cron jobs polluting interactive chat threadsSeparate cron execution history with ⏰ badge
No visual feedback during agent executionLive streaming via WebSocket with tool call timeline
Hard-coded model providersSwap providers (NVIDIA, OpenAI, Anthropic, Groq, etc.) per agent

⁠Features

  • πŸ—ΊοΈ 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

⁠Architecture

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:

  1. User interacts with Canvas UI (React/Vite)
  2. REST calls β†’ Express server β†’ SQLite (agent config, chat history)
  3. Agent run β†’ AgentRunner β†’ smoke-monkey-harness β†’ LLM provider
  4. Events stream back β†’ WebSocket β†’ UI live updates

⁠Quick Start

⁠⚑ Option 1: Instant Launch with NPX (No Install Needed)

Run 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

⁠🐳 Option 2: Docker β€” Official Image (All Platforms)

Pre-built multi-arch image available on Docker Hub. Works on Mac (Intel & Apple Silicon), Linux, and Windows β€” no build step needed.

⁠Quickest way β€” one command:
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⁠ πŸš€

⁠Using Docker Compose (Canvas + PostgreSQL)

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.

⁠Useful Docker commands
# 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)


β πŸ’» Option 3: Local Development from Source
⁠Prerequisites
  • Node.js β‰₯ 22.0.0 (required for node:sqlite built-in)
  • An API key for at least one LLM provider (e.g., NVIDIA_API_KEY, OPENAI_API_KEY)
⁠1. Clone & Install
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
⁠2. Launch
npm start

Canvas is now running at http://localhost:3333⁠ πŸš€

⁠Development Mode (hot-reload UI)
# 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.


⁠Configuration

⁠Setting API Keys

API keys can be set two ways:

  1. Via the UI: Open any agent β†’ Settings β†’ Provider β†’ paste key
  2. 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.

⁠Supported Providers
ProviderEnv VariableModels
NVIDIA NIMNVIDIA_API_KEYnvidia/nemotron-3-super-120b, meta/llama-3.3-70b-instruct, etc.
OpenAIOPENAI_API_KEYgpt-4o, gpt-4o-mini, etc.
AnthropicANTHROPIC_API_KEYclaude-3-5-sonnet, claude-opus-4, etc.
Google GeminiGEMINI_API_KEYgemini-2.0-flash, gemini-2.5-pro, etc.
GroqGROQ_API_KEYllama-3.1-70b-versatile, etc.
DeepSeekDEEPSEEK_API_KEYdeepseek-chat, deepseek-reasoner
Ollama(no key)Any local model

⁠Creating Your First Agent

  1. Click + New Agent on the canvas toolbar
  2. Name your agent and select a model/provider
  3. Write a system prompt describing the agent's role
  4. (Optional) Attach MCP servers (e.g., Firecrawl for web research)
  5. (Optional) Attach skills from the library
  6. (Optional) Set a cron schedule (e.g., 0 9 * * 1-5 for weekday morning runs)
  7. Click Run or type in the chat to start an interactive session

⁠Chat Sessions & History

Each agent maintains:

  • Multi-turn chat sessions β€” conversations persist across page refreshes
  • Cron execution history β€” isolated from interactive chats, shown with ⏰ Cron Job badge
  • History tab filters β€” view All, πŸ’¬ Chats, or ⏰ Cron Jobs separately

The Session system uses SQLite (chat_sessions, chat_messages tables) so conversations are never lost, even if the server restarts.


⁠REST API

The server exposes a REST API at http://localhost:3333/api:

MethodPathDescription
GET/api/agentsList all agents
POST/api/agentsCreate agent
GET/api/agents/:idGet agent details
PATCH/api/agents/:idUpdate agent config
DELETE/api/agents/:idDelete agent
POST/api/agents/:id/runTrigger manual run
POST/api/agents/:id/stopStop running agent
GET/api/agents/:id/runsList runs (filterable by trigger_type)
GET/api/agents/runs/:runIdGet run details + events
GET/api/agents/:id/sessionsList chat sessions
POST/api/agents/:id/sessionsCreate new session
GET/api/agents/:id/sessions/:sessionId/messagesGet session messages
DELETE/api/agents/:id/sessions/:sessionIdDelete session
POST/api/agents/:id/mcpsAttach MCP server
DELETE/api/agents/:id/mcps/:mcpIdDetach MCP server
POST/api/agents/:id/skillsAttach skill
DELETE/api/agents/:id/skills/:skillIdDetach skill

WebSocket: Connect to ws://localhost:3333/ws for live agent events.


⁠Standalone / Embedded Use

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.


⁠License

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: [email protected]⁠


⁠Contributing

We welcome contributions! Please read CONTRIBUTING.md⁠ before submitting a pull request.


ProjectDescription
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⁠

Tag summary

Content type

Image

Digest

sha256:68693fa75…

Size

230.5 MB

Last updated

2 days ago

docker pull rajdeepsadhu/smoke-monkey-canvas