canvas
Display and control HTML content on connected Bitterbot nodes (Mac, iOS, Android) via the canvas host server.
Skill by Bitterbot-AI
Install
Works with Claude Code, Claude apps, Codex, Cursor, Gemini CLI, GitHub Copilot, VS Code, OpenCode, Goose, Windsurf. Read the repository before you give any tool access to your data.
npx agentmarket install skill/bitterbot-ai-canvas
Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.
Get the weekly diff
The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.
About
Use cases: design, frontend, backend, writing
Reviews
Write a reviewNo reviews yet. Installed it? Reviews come from verified installers only. How reviews work
Permissions
What this skill can do and what it asks for, from its SKILL.md. Checked Oct 25, 2026.
- Tools
- No tools found
- Secrets
- None asked for
- Install scripts
- None found
Network hosts it talks to 1
codeload.github.com· found in install command
Files it touches
~/.claude/skills/canvas
What's inside
- Skill name
canvas- Description
- Display and control HTML content on connected Bitterbot nodes (Mac, iOS, Android) via the canvas host server. Use when presenting games, visualizations, dashboards, or interactive demos on a connected device, navigating canvas URLs, capturing canvas snapshots, or debugging canvas connectivity.
- License
- MIT
- Instructions
- 200 lines in SKILL.md · view on GitHub
Before installing
- Instructions call the network
Agent Skills spec issues
- body: contains an absolute path from the author's machine
Files (1)
- SKILL.md
SKILL.md (first lines)
# Canvas
Display HTML content on connected Bitterbot nodes (Mac app, iOS, Android).
## Overview
The canvas tool lets you present web content on any connected node's canvas view. Great for:
- Displaying games, visualizations, dashboards
- Showing generated HTML content
- Interactive demos
## How It Works
### Architecture
```
┌─────────────────┐ ┌──────────────────┐ ┌─────────────┐
│ Canvas Host │────▶│ Node Bridge │────▶│ Node App │
│ (HTTP Server) │ │ (TCP Server) │ │ (Mac/iOS/ │
│ Port 18793 │ │ Port 18790 │ │ Android) │
└─────────────────┘ └──────────────────┘ └─────────────┘
```
1. **Canvas Host Server**: Serves static HTML/CSS/JS files from `canvasHost.root` directory
2. **Node Bridge**: Communicates canvas URLs to connected nodes
3. **Node Apps**: Render the content in a WebView
### Tailscale Integration
The canvas host server binds based on `gateway.bind` setting:
| Bind Mode | Server Binds To | Canvas URL Uses |
| ---------- | ------------------- | -------------------------- |
| `loopback` | 127.0.0.1 | localhost (local only) |
| `lan` | LAN interface | LAN IP address |
| `tailnet` | Tailscale interface | Tailscale hostname |
| `auto` | Best available | Tailscale > LAN > loopback |
**Key insight:** The `canvasHostHostForBridge` is derived from `bridgeHost`. When bound to Tailscale, nodes receive URLs like:
```
http://<tailscale-hostname>:18793/__bitterbot__/canvas/<file>.html
```
This is why localhost URLs don't work - the node receives the Tailscale hostname from the bridge!
## Actions
| Action | Description |
| ---------- | ------------------------------------ |
| `present` | Show canvas with optional target URL |
| `hide` | Hide the canvas |
| `navigate` | Navigate to a new URL |
| `eval` | Execute JavaScript in the canvas |
| `snapshot` | Capture screenshot of canvas |
## Configuration
In `~/.bitterbot/bitterbot.json`:
```json
{
"canvasHost": {
"enabled": true,
"port": 18793,
"root": "/Users/you/bitterbot/canvas",
"liveReload": true
},
"gateway": {
"bind": "auto"
}
}
```
### Live Reload
When `liveReload: true` (default), the canvas host:
- Watches the root directory for changes (via chokidar)
- Injects a WebSocket client into HTML files
- Automatically reloads connected canvases when files change
Great for development!
## Workflow
### 1. Create HTML content
Place files in the canvas root directory (default `~/bitterbot/canvas/`):
```bash
cat > ~/bitterbot/canvas/my-game.html << 'HTML'
<!DOCTYPE html>
<html>
<head><title>My Game</title></head>
<body>
<h1>Hello Canvas!</h1>
</body>
</html>
HTML
```
### 2. Find your canvas host URL
Check how your gateway is bound:
```bash
cat ~/.bitterbot/bitterbot.json | jq '.gateway.bind'
```
Then construct the URL:
- **loopback**: `http://127.0.0.1:18793/__bitterbot__/canvas/<file>.html`
- **lan/tailnet/auto**: `http://<hostname>:18793/__bitterbot__/canvas/<file>.html`
Find your Tailscale hostname:
```bashFrom Bitterbot-AI/bitterbot-desktop, MIT.
More from Bitterbot-AI/bitterbot-desktop
- 0.797score
slack
Bitterbot-AI
Use when you need to control Slack from Bitterbot via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
healthcheck
Bitterbot-AI
Host security hardening and risk-tolerance configuration for Bitterbot deployments.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
forage-economy
Bitterbot-AI
Use when anyone asks about bounties (or "forge"), agent earnings, the agent economy, marketplace skills, A2A activity or your network reputation.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
curiosity-loop
Bitterbot-AI
Use when the user asks what you are curious about or do not know, wants dream-synthesized insights, or after you investigate an exploration target.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
discord
Bitterbot-AI
Send, read, edit, delete, and search Discord messages, reactions, polls, pins, and threads via the message tool.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
food-order
Bitterbot-AI
Reorder previous Foodora orders, preview cart contents, and track delivery ETA/status with ordercli.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
gog
Bitterbot-AI
Search, send, and draft Gmail messages, manage Google Calendar events, query Drive and Contacts, and read/write Google Sheets and Docs via the gog CLI.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
moltbook
Bitterbot-AI
Participate in Moltbook — the social network for AI agents.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
notte
Bitterbot-AI
Deploy browser automations as scheduled, API-callable serverless Functions — plus stealth sessions, vault-backed login, captcha solving, and natural-language…
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
peekaboo
Bitterbot-AI
Capture screenshots, inspect UI elements, drive mouse/keyboard input, and manage macOS apps and windows with the Peekaboo CLI.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
pre-action-interceptors
Bitterbot-AI
Use when a tool error begins with "INTERCEPTOR:", a sent message was silently hedged or rewritten, or the user asks about active guards or blocked actions.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
things-mac
Bitterbot-AI
Manage Things 3 via the `things` CLI on macOS (add/update projects+todos via URL scheme; read/search/list from the local Things database).
SkillAFreshness: A★ 2.5KClaude Code +9
Signals
- Stars
- 2,478
- Forks
- 422
- Open issues
- 5
- Last commit (this folder)
- Apr 22, 2026 (6 months ago)
- Last release
- Oct 22, 2026 (7 days ago)
From GitHub (fetched Oct 24, 2026).
Details
- License
- MIT
- Website
- bitterbot.ai
- First seen
- Oct 24, 2026
- Last checked
- Oct 24, 2026
- Source
- GitHubgithub-graphql
More from Bitterbot-AI
- 0.797score
food-order
Bitterbot-AI
Reorder previous Foodora orders, preview cart contents, and track delivery ETA/status with ordercli.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
gog
Bitterbot-AI
Search, send, and draft Gmail messages, manage Google Calendar events, query Drive and Contacts, and read/write Google Sheets and Docs via the gog CLI.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
forage-economy
Bitterbot-AI
Use when anyone asks about bounties (or "forge"), agent earnings, the agent economy, marketplace skills, A2A activity or your network reputation.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
curiosity-loop
Bitterbot-AI
Use when the user asks what you are curious about or do not know, wants dream-synthesized insights, or after you investigate an exploration target.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
discord
Bitterbot-AI
Send, read, edit, delete, and search Discord messages, reactions, polls, pins, and threads via the message tool.
SkillAFreshness: A★ 2.5KClaude Code +9 - 0.797score
moltbook
Bitterbot-AI
Participate in Moltbook — the social network for AI agents.
SkillAFreshness: A★ 2.5KClaude Code +9
Cite this page
canvas skill. Agent Mart. https://agentmart.dev/skills/bitterbot-ai-canvas (last updated 2026-10-24)