Sketch
An org-level AI assistant. One deployment, multiple users, each with their own workspace, memory, and tool integrations.
Install / Use
/learn @canvasxai/SketchREADME
The problem nobody talks about
AI assistants are incredible — until you try to share one with your team.
Right now, every person on your team sets up their own AI. Their own API keys. Their own context. Their own memory. Nobody's assistant knows what the company actually does. Nobody's assistant remembers the onboarding doc you uploaded last week. And when someone leaves, their carefully-built context walks out the door with them.
We kept watching teams duct-tape personal AI tools into workflows that clearly needed a shared brain. Founders answering the same customer question their assistant already answered for a teammate. Engineers re-explaining the codebase to a fresh Claude window every morning. Ops people copy-pasting the same SOPs into chat because the bot doesn't "know" yet.
It felt broken.
What Sketch actually is
Sketch is an open-source, self-hostable AI assistant built for teams. One deployment, every team member, any channel they already use.
Think of it as giving your entire org a shared AI teammate — one that remembers, learns, and works across Slack and WhatsApp — while still keeping everyone's private stuff private.
Here's what makes it different from "just another chatbot":
- Isolated workspaces — each person gets their own files, memory, and sessions. Your stuff doesn't leak into mine.
- Shared org knowledge — upload a doc once and everyone's assistant knows it. No more "hey can you send me that PDF again?"
- Multi-channel, same brain — message it on Slack, pick up the thread on WhatsApp. It's the same assistant, same memory, wherever you are.
- Per-user tool auth — each person connects their own integrations (Gmail, GitHub, etc.). The assistant acts on your behalf, not the org's.
- Real memory — personal, channel, and org-level memory layers. It actually remembers things between conversations.
- Skills system — deploy org-wide skills (like ICP discovery or CRM tools) that every team member gets automatically.
- Genuinely self-hostable — a single Node.js process and SQLite. No Kubernetes thesis required.
Inspired by OpenClaw — a brilliant personal AI assistant. Sketch takes its multi-channel, local-first approach and adds the missing piece: a multi-user org layer.
Quick Start
Requires Node.js 24+ and pnpm. That's it.
git clone https://github.com/canvasxai/sketch.git
cd sketch
pnpm install
cp .env.example .env
pnpm dev
Open http://localhost:3000 — the onboarding wizard walks you through Slack/WhatsApp setup, API keys, and your first conversation.
How it works
Slack / WhatsApp
|
Gateway (Bolt / Baileys)
|
Message Queue (per-channel, sequential)
|
Agent Runner
|
Claude Agent SDK
|
Workspace (scoped files, tools, memory)
Every user gets a sandboxed workspace at data/workspaces/{user_id}/. Every tool call passes through canUseTool — a runtime validator that checks file paths and permissions before anything executes. The agent literally cannot escape its sandbox.
Channels share workspaces too — @mention Sketch in a Slack channel and the whole channel gets a shared context with per-thread sessions. No conversation soup.
Channels
| Channel | Status | |------------|--------| | Slack | Stable — DMs, @mentions in channels, threaded conversations | | WhatsApp | Stable — DMs and group chats, media support |
Both channels support file attachments, images (with vision), and file sharing back to chat.
Self-Hosting
Sketch runs as a single Node.js process — API server, web UI, and agent runner all in one. No separate web server, no external database, no Docker Compose manifesto.
SQLite by default (Postgres when you outgrow it). Throw it on a $5 VPS and you're done.
See the full Self-Hosting Guide for production deployment with systemd and Caddy.
Tech Stack
| What | How | |----------------|--------------------------------| | Runtime | Node.js 24, TypeScript | | Agent brain | Claude Agent SDK | | Database | SQLite (Kysely query builder) | | HTTP | Hono | | Frontend | React, Vite | | Build | tsdown, pnpm monorepo | | Lint + Format | Biome | | Tests | Vitest (800+ tests) |
Project Structure
sketch/
packages/
server/src/
slack/ -> Bolt adapter (Socket Mode, DMs, channels, threads)
whatsapp/ -> Baileys adapter (QR pairing, media, groups)
agent/ -> Claude Agent SDK runner, workspace isolation, prompts
db/ -> Kysely + SQLite, migrations, repositories
http.ts -> Hono app with API routes
queue.ts -> Per-channel sequential message queue
web/src/ -> React admin UI (onboarding, channels, settings)
shared/src/ -> Shared types
data/ -> Runtime data (workspaces, SQLite DB) — gitignored
Contributing
We'd genuinely love your help. Whether it's a new channel adapter, a skill, a bug fix, or telling us our error messages are confusing — all of it matters.
Join us on Discord to chat with the team, ask questions, or just hang out.
See CONTRIBUTING.md for dev setup, code style, and PR guidelines.
License
MIT — see LICENSE.
