Claw Studio lets you design, configure, and deploy personal AI bots using a drag-and-drop canvas. Connect nodes that represent triggers, agents, tools, memory, and outputs. When you're happy with the design, hit Deploy and Claw Studio writes the configuration directly to nanoclaw.
| 🌅 Morning briefings | Weather, calendar, news, and exchange rates — delivered on a schedule to your phone |
| 💬 Channel bots | Bots that respond on Telegram, WhatsApp, Slack, Discord, or email |
| ⏰ Scheduled automations | Daily digests, weekly reports, reminders — any cron schedule |
| 🔀 Multi-agent pipelines | Chain agents together with routing, conditions, and transforms |
| 🧠 Bots with memory | Agents that remember context across conversations |
| 🛠 Tool-equipped agents | Web search, shell commands, file access, MCP integrations |
| 📣 Push notifications | Trigger phone alerts based on any condition or schedule |
| 🤖 Agent swarms | Multiple agents collaborating in a single pipeline |
- Visual pipeline editor — drag-and-drop canvas powered by React Flow, with minimap and keyboard shortcuts
- AI chat assistant — describe what you want in plain English; the assistant builds or edits nodes for you using Claude
- Guided option prompts — the assistant presents clickable choices when it needs your input, so you never have to guess what to type
- 11 node types — Trigger, Agent, Tool (Bash + MCP), Memory, Transform, Condition, Router, Output, File, Comment, Bot Container
- Bot swarms (swimlanes) — add a Bot Container to your canvas to define sub-bots; deploy writes a separate
CLAUDE.mdand registers each container as its own bot, all from one blueprint - Auto-wired handoffs — draw an edge from an Output node to a Bot Container and the Output automatically switches to "Pass to another bot" with the correct target set; deleting the edge reverts it
- Swarm hierarchy in bot picker — bots that contain sub-bots show a ▸ expand toggle in the picker; sub-bots are indented beneath their parent
- Reconnectable edges — hover any edge to reveal its endpoints; drag an endpoint to move the connection, or drop it on the canvas to delete it
- Connection rules — Bot Containers only accept connections from Output nodes; other connection types are blocked at the canvas level
- Pass to another bot — Output node supports "Pass to another bot" as a destination, generating handoff instructions so the primary bot automatically triggers a sub-bot when it finishes
- Bot settings — configure file mounts per bot from the
···menu in the bot picker, giving bots read or read/write access to folders on your machine - Fail-fast guardrails — every deployed bot gets built-in guardrails in its
CLAUDE.md: send an early acknowledgement, fail fast instead of looping, cap retries - Multi-trigger nodes — one trigger node can combine a schedule and a message trigger (e.g. "run every morning, but also on demand")
- Channel-aware AI — the assistant reads your connected channels and automatically suggests the right output destination
- Run now button — trigger any scheduled bot immediately, without waiting for its next cron tick
- Undo/redo — 50-step canvas history via Cmd+Z / Cmd+Shift+Z or the toolbar buttons
- Crash-safe drafts — unsaved canvas changes are auto-saved to localStorage every second and restored if you close or refresh without saving; chat history survives a refresh within the same tab session
- Starter templates — open a ready-made blueprint (morning briefing, PR reviewer, price checker) from the New bot flow to get started in seconds
- Free weather built-in — yr.no weather and air quality presets, no API key needed
- MCP service picker — built-in presets for Gmail, Google Calendar, iCal, News, and more
- Schedule presets — pick from common schedules ("Every day at 8am") without writing cron expressions
- OAuth-aware — nodes for Gmail and Google Calendar never ask for an API key; Claw Studio detects your existing credentials automatically
- Configuration warnings — amber
!badges highlight nodes that still need setup before deploying - Deploy actions — Deploy shows exactly what was applied automatically vs. what needs manual steps
- One-click backup — back up all your bots via the
⋯menu in the toolbar - Setup wizard — first-run wizard detects your nanoclaw installation and walks through API key setup
- GitHub integration — agents can list PRs, post reviews, check CI, and create issues via the
ghCLI (install with/add-github)
- macOS (Apple Silicon or Intel) or Linux (Ubuntu 22.04+, Debian, Fedora, and compatible)
- An Anthropic API key — get one at console.anthropic.com
Note: A credit card is required to activate your Anthropic account. Add one at console.anthropic.com/settings/billing before generating a key. Usage is pay-as-you-go.
Everything else (Node.js, nanoclaw, Docker or Apple Container) is installed automatically.
macOS:
curl -fsSL https://raw.githubusercontent.com/perweum/claw-studio/main/install.sh | bashThis installs nanoclaw and all dependencies, then creates a Claw Studio app in /Applications with no Gatekeeper warnings — the app is assembled locally on your machine so macOS never quarantines it. Find it in Launchpad or Spotlight when the install finishes.
Linux (Ubuntu/Debian/Fedora):
curl -fsSL https://raw.githubusercontent.com/perweum/claw-studio/main/install.sh | bashThe same script detects Linux and uses apt or dnf to install Node.js 20 LTS and Docker Engine. nanoclaw is registered as a systemd user service that starts on login. When done, start Claw Studio with:
cd ~/claw-studio && npm run devThen open http://localhost:5275 in your browser.
Download Claw Studio.dmg → open it → drag Claw Studio to Applications.
Because the app isn't notarized (that requires a $99/year Apple Developer account), macOS will block it on first open. To fix it, open Terminal and run:
xattr -cr /Applications/"Claw Studio.app"Then double-click normally. You only need to do this once. The DMG also includes a helper file called "If macOS blocks the app — click here.command" that does the same thing automatically.
On first launch, the setup wizard will:
- Confirm your nanoclaw installation (auto-detected in most cases)
- Ask for your Anthropic API key (and remind you that a credit card is required to activate your account)
- Offer to create your first bot immediately
Re-run the install script. It will pull the latest code, update dependencies, and leave your bots and settings untouched:
curl -fsSL https://raw.githubusercontent.com/perweum/claw-studio/main/install.sh | bashgit clone https://github.com/perweum/claw-studio.git
cd claw-studio
npm install
npm run devClick + New bot in the toolbar. Give it a name and optionally connect an output channel (Telegram, WhatsApp, Slack, etc.) so it knows where to send messages.
Use the toolbar buttons or Cmd/Ctrl+K to open the command palette and add nodes. Connect nodes by dragging from a source handle to a target handle. Click any node to open its settings panel on the right.
Canvas keyboard shortcuts:
| Shortcut | Action |
|---|---|
Cmd/Ctrl+Z |
Undo |
Cmd/Ctrl+Shift+Z |
Redo |
Cmd/Ctrl+S |
Save |
Cmd/Ctrl+K |
Open command palette |
Delete |
Delete selected node |
Escape |
Close palette / picker |
Node types:
| Node | What it does |
|---|---|
| Trigger | Starts the pipeline — schedule (cron), message, or manual. One trigger node can have multiple trigger conditions. |
| Agent | A Claude agent with a system prompt and optional tools |
| Tool | Gives an agent capabilities — Bash scripts or MCP services |
| Memory | Reads from or writes to the group's persistent memory |
| Transform | Formats, truncates, or extracts data |
| Condition | Branches the pipeline based on a true/false check |
| Router | Sends output to different paths based on content |
| Output | Sends a message, saves to a file, POSTs to a webhook, or passes to another bot |
| File | Reads or writes a file in the group's workspace |
| Comment | Adds a note to the canvas (not deployed) |
| Bot Container | Groups nodes into a separate bot pipeline — deploy generates a CLAUDE.md for each container |
How logic nodes work: Condition, Router, Transform, Memory, and File nodes add instructions to your agent's system prompt — they're not runtime middleware that automatically intercepts output. The agent reads all instructions and decides how to apply them when it runs.
A single Trigger node can combine multiple trigger types. For example, a bot that checks prices every morning but also responds when you message it manually:
- Set the primary trigger to On a schedule with your cron expression
- Click + Add another trigger and choose When a message is received
This is the recommended approach — do not create two separate Trigger nodes.
Use Bot Container nodes to build pipelines where multiple independent bots collaborate.
How it works:
- Click + Bot in the toolbar to add a Bot Container to the canvas
- Rename the container in the settings panel on the right (e.g. "Code Reviewer") — the folder name is generated automatically
- Drag Agent, Tool, Trigger, and Output nodes inside the container — they belong to that bot
- Nodes outside all containers belong to the primary bot (your current blueprint)
- Click ⬆ Deploy — Claw Studio writes a
CLAUDE.mdfor each container and registers each as its own bot in nanoclaw
To pass results from one bot to another, draw an edge from an Output node (bottom handle) to a Bot Container. The Output automatically switches to "Pass to another bot" mode with the correct target set — no manual configuration needed. Deleting the edge reverts the Output back to its previous destination.
The bot picker reflects the swarm hierarchy: parent bots that contain sub-bots show a ▸ toggle. Click it to expand and see the sub-bots listed beneath their parent.
Important: Only the main channel bot can hand off to other bots. Sub-bots (in containers) can pass back to the coordinator but not to arbitrary third bots. This is a nanoclaw constraint, explained in the Output node's settings panel.
To give a bot access to folders on your machine:
- Click the bot name button in the toolbar to open the bot picker
- Click the ··· button on the bot you want to configure
- Choose Bot settings
- Under File access, click + Add folder
- Enter the host path (e.g.
/Users/per/my-project) — the name inside the bot auto-fills - Choose Read only or Read and write
- Click Save settings
Changes take effect the next time the bot runs.
Type in the chat panel on the left. The assistant builds your pipeline from a plain-English description and asks clarifying questions with clickable option buttons when it needs your input. Examples:
"Add a morning briefing that runs at 7am, reads my Gmail and calendar, and sends a summary to Telegram"
"Add a weather tool that checks Oslo and posts the forecast"
"Make the agent more concise"
The assistant is aware of your connected channels — if you say "send to Slack" and Slack is set up, it will use Slack. If not, it will tell you and suggest an alternative.
Click ⬆ Deploy in the toolbar. Claw Studio will:
- Write the agent's
CLAUDE.mdinstructions to the nanoclaw group - Register any schedule triggers in nanoclaw's database
- Show a summary of what was done automatically and what still needs manual setup (e.g. API keys, channel registration)
Click ▶ Run now in the toolbar to trigger the bot's scheduled task right away, without waiting for the next cron tick. Useful for testing after deploying. A confirmation message appears for a few seconds showing how many tasks were triggered and where the results will be sent.
Run now only works for bots with schedule triggers that have been deployed. If the button shows an error, make sure you've clicked Deploy first.
Click the ⋯ menu in the top-right of the toolbar → Back up all bots. This downloads a .zip containing your bots, their memory, conversation history, and credentials — everything needed to restore on another machine.
The AI assistant knows how to build these integrations out of the box — just describe what you want in the chat. No extra installs or API keys needed for the ones marked free.
🌤 Weather & Environment — yr.no forecasts, air quality, auto-location
Weather forecast (free, no API key — yr.no / MET Norway)
Ask: "Add a weather tool for Oslo" or "Build a morning briefing with today's weather"
The assistant uses yr.no, the Norwegian Meteorological Institute's free open-data API. Just say the city name — no API key, no sign-up.
Air quality works the same way — ask for PM2.5, pollen, or air quality index alongside the weather.
Auto-location weather — the assistant can combine IP geolocation with yr.no so the forecast automatically uses the machine's current location without the user setting a city.
📍 IP Geolocation — detect current city and coordinates automatically
Free, no API key — uses ip-api.com
Ask: "Detect my location automatically" or "Use my current location for the weather"
Returns city, region, country, latitude, and longitude from the machine's public IP. Most useful as a companion to the weather preset — the bot finds your location and fetches the forecast without any configuration.
📰 RSS & News Feeds — any blog, podcast, subreddit, YouTube channel
Free, no API key
Ask: "Add an RSS feed for Hacker News" or "Follow this blog: [URL]"
Works with any RSS or Atom feed. Common sources the assistant knows about:
| Source | How to ask |
|---|---|
| Hacker News | "Add Hacker News top stories" |
| "Follow r/MachineLearning" | |
| YouTube channel | "Add YouTube feed for [channel name]" |
| Any blog | "Follow [blog URL]" — most blogs have /feed or /rss |
| Podcast | Paste the podcast's RSS URL |
📅 Calendar & Scheduling — Apple Calendar, iCal feeds, public holidays
Apple Calendar (free, macOS only — reads all accounts synced to Calendar.app)
Ask: "Read my calendar for today" or "Add today's meetings to my morning briefing"
Reads events from all calendars in Calendar.app — iCloud, Google, Outlook, Exchange — without needing any URLs or OAuth. May prompt for Calendars access in System Settings on first use.
iCal feeds (free — Outlook, Fastmail, Airbnb, any .ics URL)
Ask: "Add my work calendar" and paste the iCal/ICS URL
Works with any service that provides an ICS link, including Outlook Web, Fastmail, Apple Calendar sharing, Airbnb reservations, and sports schedules.
Public holidays (free — date.nager.at)
Ask: "Skip the morning briefing on public holidays" or "Add Norwegian public holidays"
Supports 100+ countries (NO, SE, DK, US, GB, DE, FR, …). Useful combined with schedule triggers so bots automatically skip running on national holidays.
🍎 macOS Native — Reminders
Apple Reminders (free, macOS only)
Ask: "Read my reminders" or "Create a reminder when the bot finishes"
Reads incomplete reminders from Reminders.app and can create new ones. Works with iCloud-synced reminders so they appear on iPhone too. May prompt for Reminders access in System Settings on first use.
💱 Finance — Exchange Rates
Free, no API key — open.er-api.com, updates hourly
Ask: "Add today's exchange rates to my briefing" or "Show USD, EUR, and NOK rates"
Supports all major currencies. The user can set any base currency (USD, EUR, NOK, etc.).
🔔 Push Notifications — ntfy.sh
Free for basic use — ntfy.sh, no account needed
Ask: "Send me a push notification when the bot runs"
The bot sends alerts to the user's phone via the free ntfy app (iOS + Android). The user picks a topic name and subscribes in the app — no account or API key required for basic use. Self-hostable for privacy.
📧 Gmail & Google Calendar — OAuth, skill required
Gmail and Google Calendar are available via the /add-gmail skill in nanoclaw. Once installed, the assistant can read emails, send replies, draft messages, and read calendar events.
Ask in the chat: "Set up Gmail" — the assistant will walk through the setup.
OAuth is handled automatically — no API key is ever stored in the node config.
🐙 GitHub — PR reviews, issues, CI status, skill required
GitHub integration is available via the /add-github skill. Once installed, agents can:
- List open pull requests
- Read PR diffs and post review comments
- Check CI status
- Create and comment on issues
Ask in the chat: "Set up GitHub" — the assistant will walk through generating a Personal Access Token and installing the gh CLI into the agent container.
claw-studio/
├── chat-plugin.ts # Vite dev-server plugin — API routes + Claude integration
├── vite.config.ts # Vite config, loads the plugin
├── install.sh # One-line installer for macOS and Linux
├── src/
│ ├── App.tsx # Root component, layout, keyboard shortcuts
│ ├── store.ts # Zustand state — nodes, edges, group, deploy
│ ├── types.ts # Node data types and metadata
│ ├── schema.ts # Zod schema for blueprint validation
│ ├── components/
│ │ ├── ChatPanel.tsx # AI assistant sidebar (left)
│ │ ├── NodePanel.tsx # Node settings panel (right, opens on selection)
│ │ ├── Toolbar.tsx # Top bar — bots, deploy, run now, palette, backup
│ │ ├── StatusPanel.tsx # Live system status — all bots, next/last run, Run Now
│ │ ├── GroupPicker.tsx # Bot selector / new bot modal
│ │ ├── SetupWizard.tsx # First-run wizard
│ │ ├── CommandPalette.tsx # Node type picker (Cmd+K)
│ │ └── ContextMenu.tsx # Right-click menu on nodes
│ └── nodes/
│ ├── AgentNode.tsx
│ ├── TriggerNode.tsx
│ ├── ToolNode.tsx
│ ├── MemoryNode.tsx
│ ├── TransformNode.tsx
│ ├── ConditionNode.tsx
│ ├── RouterNode.tsx
│ ├── OutputNode.tsx
│ ├── FileNode.tsx
│ ├── SwimlaneNode.tsx
│ └── CommentNode.tsx
chat-plugin.ts is a Vite plugin that adds API routes to the dev server — no separate backend process needed:
| Endpoint | Purpose |
|---|---|
GET /api/setup |
Check if nanoclaw path is configured / auto-detected |
POST /api/setup |
Save nanoclaw path to local .env |
GET /api/config |
Check if Anthropic API key is configured |
POST /api/config |
Write API key to nanoclaw's .env |
GET /api/groups |
List nanoclaw groups |
GET /api/groups/channels |
List registered channels (Telegram, Slack, etc.) |
GET /api/groups/:folder/blueprint |
Load a group's visual blueprint |
PUT /api/groups/:folder/blueprint |
Save a group's visual blueprint |
POST /api/groups/:folder/deploy |
Generate CLAUDE.md + register schedules |
POST /api/groups/:folder/run |
Trigger scheduled tasks immediately (Run now) |
GET /api/groups/:folder/runs |
Get recent run history and last run status |
GET /api/status |
Live status for all bots — next run, last run, warnings |
GET /api/groups/:folder/settings |
Get bot settings (additional file mounts) |
PUT /api/groups/:folder/settings |
Update bot settings (merges with existing container config) |
POST /api/groups/:folder/register |
Register a group with a channel JID |
POST /api/chat |
Run the AI assistant (agentic loop with tools) |
GET /api/templates |
List starter blueprint templates |
GET /api/backup |
Download a zip backup of all bots and data |
Claw Studio stores its own config in a local .env file:
NANOCLAW_PATH=/path/to/your/nanoclawThis is auto-detected if Claw Studio is placed inside or next to your nanoclaw directory. The setup wizard handles it on first run.
nanoclaw's own .env (for ANTHROPIC_API_KEY and channel tokens) is read from the nanoclaw directory.
The Claw Studio chat assistant can run shell commands on your machine to help with setup and installation. This is intentional — it removes the need to switch to a terminal for things like installing channels or configuring tokens. These guardrails are built in:
| Pattern | Reason |
|---|---|
sudo |
No privilege escalation |
curl ... | bash |
No piped script execution |
dd if= |
No disk write operations |
mkfs |
No filesystem formatting |
Redirects to system paths (> /etc/...) |
No writes outside user directories |
These commands show Approve / Cancel buttons in the chat before anything runs:
rm/rmdir— file and directory deletiongit reset --hard/git clean -f— destructive git operationslaunchctl kickstart/systemctl restart— service restarts
When reading .env files, all values containing _TOKEN, _SECRET, _PASSWORD, API_KEY, or OAUTH are replaced with [hidden] before being sent to Claude. Your keys and tokens are never included in the AI context.
All commands run with the nanoclaw directory as the working directory. File reads that resolve outside the nanoclaw directory are rejected.
The dev server binds to localhost only (Vite's default). Claw Studio is not accessible from other machines unless you explicitly change vite.config.ts.
File contents read by the assistant (CLAUDE.md, logs, etc.) are passed as tool results, not injected into the system prompt.
Yes. Claw Studio is just the editor — your bots run inside nanoclaw, which is a separate background service. Closing the Claw Studio browser tab or terminal has no effect on your running bots.
Yes. The installer (install.sh) supports Ubuntu 22.04+, Debian, and Fedora. It installs Node.js 20, Docker Engine, and registers nanoclaw as a systemd user service. There is no macOS .app on Linux — start Claw Studio from the terminal with npm run dev and open http://localhost:5275.
Use the ⋯ → Back up all bots option in the toolbar. This downloads a zip containing everything nanoclaw needs: your bots, their memory, conversation history, API keys, and channel credentials.
On the new machine:
- Install nanoclaw and run
npm install && ./container/build.sh - Extract the backup zip into your nanoclaw folder
- Clone Claw Studio and run
npm install && npm run dev
Everything picks up exactly where it left off.
The AI assistant in Claw Studio uses Claude via the Anthropic API, which is pay-as-you-go. You need to add a credit card at console.anthropic.com/settings/billing to activate your account — this is an Anthropic requirement, not Claw Studio's.
Designing bots (chatting with the assistant) typically costs a few cents per session. Running bots depends on how often they trigger — a daily briefing bot costs roughly $0.01–0.05 per day.
You can monitor usage at console.anthropic.com.
No — Claw Studio is a visual editor for nanoclaw configurations. It needs nanoclaw running to save blueprints, register schedules, and deploy bots. Install nanoclaw here.
Open the + New bot modal and click one of the channel buttons (Telegram, WhatsApp, Slack, Discord). The AI assistant will walk you through the setup — no terminal needed.
Your bots and their data live in nanoclaw, not in Claw Studio. Updating Claw Studio (pulling the latest git version) only changes the editor. Your bots continue running unaffected.
Deploying writes a CLAUDE.md file to the group and registers any schedules. Check:
- nanoclaw is running (
launchctl list | grep nanoclawon macOS,systemctl --user status nanoclawon Linux) - The group has a channel connected (visible in the My bots list)
- The deploy summary didn't show any red "needs attention" items
- Use ▶ Run now to trigger the bot immediately and confirm it sends output before relying on the schedule
Yes — click ▶ Run now in the toolbar. This sets the task's next run time to now so the scheduler picks it up within seconds. Results arrive via the bot's connected output channel (Telegram, file, etc.).
The assistant reads your connected channels from nanoclaw and should suggest the right one. If it still defaults to Telegram, it likely means Slack isn't set up yet in nanoclaw. Ask the assistant: "Set up Slack" — it will walk you through connecting it.
Claw Studio is designed for personal use on a single machine. nanoclaw itself is single-user by design.
Contributions are welcome! A few things to know:
- The project uses React + Vite + TypeScript
- State is managed with Zustand (
src/store.ts) - The canvas is React Flow (
@xyflow/react) - The backend plugin (
chat-plugin.ts) runs inside the Vite dev server — no Express or separate server - nanoclaw's
better-sqlite3is loaded viacreateRequirefrom nanoclaw's ownnode_modules - The AI chat uses an agentic loop (up to 40 turns) with three tools:
run_command,read_file,write_env_key
npm install && npm run dev # develop
npm run build # type-check + bundlePlease open an issue before starting large changes so we can discuss the approach.
MIT