By frankjoshua
Live browser UI for Claude Code sessions, driven by a watched JSON state file.
A Claude Code channel plugin that gives a running session a live browser UI. The agent drives it via the canvas CLI; the browser updates instantly via SSE.
Runtime tools (assumed present, not auto-installed):
canvas CLI for JSON manipulationcanvas CLI to ping the serverlocalhost)Single-user infrastructure: not bundled with install scripts.
claude plugin marketplace add frankjoshua/agent-canvas
claude plugin install agent-canvas
This installs the channel plugin, MCP server, and /canvas skill. No other setup needed.
Optionally create .canvas/ui-default.json in your project to define a starting layout.
The plugin runtime loads from a versioned cache (~/.claude/plugins/cache/agent-canvas/agent-canvas/<version>/), not directly from this repo. After pulling changes (git pull in ~/.claude/plugins/marketplaces/agent-canvas/), refresh the cache so live sessions see the new code:
claude plugin update agent-canvas
Or, if that doesn't pick up local changes, sync manually:
rsync -a --delete \
--exclude=node_modules --exclude='.git' --exclude='.worktrees' --exclude='.canvas' \
~/.claude/plugins/marketplaces/agent-canvas/ \
~/.claude/plugins/cache/agent-canvas/agent-canvas/0.0.1/
Then restart your Claude Code session (cl) — the new code attaches at session startup.
Agents update the UI via scripts/canvas.sh. See skills/canvas/SKILL.md for the full command reference. Quick example:
CANVAS="$HOME/.claude/plugins/marketplaces/agent-canvas/scripts/canvas.sh"
bash "$CANVAS" init --title "My Page"
bash "$CANVAS" html status "<span class='badge'>Running</span>"
The channel attaches automatically when you start Claude Code with --channels plugin:agent-canvas@agent-canvas-marketplace --dangerously-load-development-channels (channels are in research preview).
The server binds to 0.0.0.0 by default — accessible from any device on the same network (phones, tablets, other machines via Tailscale, etc.). Override with CANVAS_HOST if needed.
Create .canvas/ui-state.json in your project:
{
"version": 1,
"title": "My Dashboard",
"theme": "dark",
"layout": "stack",
"components": [
{
"id": "greeting",
"type": "html",
"content": "<div class='card bg-base-200'><div class='card-body'><h2 class='card-title'>Hello</h2><p>Edit this file to update the UI.</p></div></div>"
}
]
}
html -- raw HTML with full DaisyUI + Tailwind classesmarkdown -- renders markdown to HTML, supports raw HTML passthroughform -- structured input form, submissions flow back as channel eventslog -- scrolling append-only log panelAdd data-input-event to any element in an html component to make it interactive:
<button class="btn btn-primary" data-input-event="confirm">Confirm</button>
Clicks send a channel event to Claude with the event name and parent component ID.
Each session gets its own port. The URL is printed to stderr and injected into the Claude Code session on startup.
Admin access level
Server config contains admin-level keywords
Own this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimOwn this plugin?
Verify ownership to unlock analytics, metadata editing, and a verified badge. GitHub access is read-only (username + org membership).
Sign in to claimBased on adoption, maintenance, documentation, and repository signals. Not a security audit or endorsement.
npx claudepluginhub frankjoshua/agent-canvas --plugin agent-canvasMemory compression system for Claude Code - persist context across sessions
Standalone image generation plugin using Nano Banana MCP server. Generates and edits images, icons, diagrams, patterns, and visual assets via Gemini image models. No Gemini CLI dependency required.
Streamline people operations — recruiting, onboarding, performance reviews, compensation analysis, and policy guidance. Maintain compliance and keep your team running smoothly.
Write feature specs, plan roadmaps, and synthesize user research faster. Keep stakeholders updated and stay ahead of the competitive landscape.
Create content, plan campaigns, and analyze performance across marketing channels. Maintain brand voice consistency, track competitors, and report on what's working.
Prospect, craft outreach, and build deal strategy faster. Prep for calls, manage your pipeline, and write personalized messaging that moves deals forward.