From cavepaintings
Use when the user wants to draw diagrams, annotate screenshots, sketch architecture, or send visual content to this conversation. Also use when the user asks you to draw, sketch, or place objects on a canvas. Triggers on mentions of drawing, sketching, diagramming, whiteboard, visual canvas, or annotating images.
npx claudepluginhub sds-mode/cavepaintings --plugin cavepaintingsThis skill uses the workspace's default tool permissions.
1. Start (or reuse) the server:
Guides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Guides building MCP servers enabling LLMs to interact with external services via tools. Covers best practices, TypeScript/Node (MCP SDK), Python (FastMCP).
Generates original PNG/PDF visual art via design philosophy manifestos for posters, graphics, and static designs on user request.
Start (or reuse) the server:
CAVEPAINTINGS_PROJECT_DIR="$(basename "$(pwd)")" <SKILL_DIR>/scripts/start-server.sh
This checks for an existing session automatically. If one is running, it returns the existing connection info with "status": "existing". Otherwise it starts a new server. Either way, save the url and port from the JSON response.
Tell the user:
"Cavepaintings canvas open at {url}. Draw diagrams, paste images, and click 'Submit to Claude' (or Ctrl+Enter) to send them here."
Receiving submissions: The UserPromptSubmit hook automatically detects new submissions when the user sends any message. It surfaces all unseen submissions with prompt text, object summaries, and PNG/JSON file paths. You can also check manually:
node <SKILL_DIR>/scripts/check-session.js --submissions
Read the PNG with the Read tool to see the visual content.
Pushing objects to the canvas: POST Fabric.js objects to http://localhost:{port}/api/canvas with {"diagram":{"objects":[...]},"mode":"merge"}. Objects appear on the canvas in real time. Use "merge" to add or "replace" to clear and load.
Polling submissions via API: GET http://localhost:{port}/api/submissions?since=0 returns all submissions newer than the given timestamp.
POST /api/canvas) only works while a browser tab is connected