From whiteboard
Audit Excalidraw workspaces and canvases to detect orphaned workspaces, tombstone-heavy canvases, and cache/disk mismatches. Use when workspaces are piling up, sync looks suspicious, or you want to check for stale artifacts before creating new canvases.
How this skill is triggered — by the user, by Claude, or both
Slash command
/whiteboard:auditing-workspacesThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Call the whiteboard MCP `/api/debug` endpoint to inspect workspace, canvas, and cache state.
Call the whiteboard MCP /api/debug endpoint to inspect workspace, canvas, and cache state.
Use it to find old workspaces (hasActivePort=false) and canvases dominated by tombstones, then report them as cleanup candidates.
For the main drawing workflow, see the drawing-visuals skill in skills/drawing-visuals/SKILL.md.
~/.whiteboard/ seems bloatedIn ~/.whiteboard/{workspaceId}/.port, line 1 is the port number and line 2 is the PID.
An active workspace has a .port file and a live PID.
# Quick check for running .port files
ls $HOME/.whiteboard/*/.port 2>/dev/null
If multiple workspaces are found, use the most recent one by mtime.
/api/debugcurl -s http://localhost:{PORT}/api/debug | jq .
Response shape:
{
"sessions": [
{
"workspaceId": "...",
"hasActivePort": true,
"canvases": [
{
"slug": "...",
"totalElements": 42,
"visibleElements": 30,
"tombstones": 12,
"cached": true
}
]
}
],
"cache": { "size": 3, "keys": ["sess/slug"] }
}
Check the following mechanically:
| Concern | Condition | Suggested Action |
|---|---|---|
| dead workspace | hasActivePort=false and canvases are not empty | candidate for deleting ~/.whiteboard/{workspaceId}/ |
| tombstone-heavy canvas | tombstones / totalElements >= 0.5 and totalElements >= 10 | consider rebuilding with canvas_clear or re-saving from a fresh snapshot |
| empty canvas | totalElements=0 | candidate for deletion |
| cache leak | present in cache.keys but its workspace has hasActivePort=false | usually fixed by process restart; report it |
| cache size | cache.size > 20 | possible memory pressure; watch long-lived workspaces |
Keep the user-facing summary short and structured like this:
## whiteboard audit report
Active: {N} workspace / {M} canvas
Old workspaces: {K} candidates
Tombstone-heavy: {slug count}
Empty: {slug count}
### Deletion candidates
- ~/.whiteboard/{workspaceId}/ ({reason})
### Needs review
- {workspaceId}/{slug}: tombstones {T}/{Total} -> consider canvas_clear
Do not delete anything automatically. Always confirm with the user before running rm -rf.
/api/debug is a local-only endpoint. It is unauthenticated, so do not expose it externallycached=true is currently backed by an in-memory LoroDoc. cached=false means it was read from disk through peekDoc only and did not populate cachetombstones count soft-deleted elements. They are part of the CRDT model, so do not delete them directly. If they are a problem, canvas_clear and rebuild is the safe route~/.whiteboard/ destroys all workspace history. Delete only dead workspaces selectivelynpx claudepluginhub kamiazya/whiteboard --plugin whiteboardCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.