b-open-io/gemskills/visual-planner
Claude Code and agent skill by b-open-io/gemskills
- community
Checking that the SKILL.md file is still in the repository.
This skill should be used when the user asks to "plan a workflow", "diagram an agent system", "visualize an architecture", "map out a pipeline", "create a flow diagram", "draw agent connections", "design a multi-agent system", "show how agents interact", "make a system diagram", "visualize a data pipeline", "map out a process", "diagram my workflow", "create an architecture diagram", "plan agent orchestration", "brainstorm a system design", "show the flow between components", "interactive workflow diagram", "workflow canvas", "visual-planner", "open in tldraw", or "plan this project visually". Produces tldraw .tldr diagrams natively — the standard infinite canvas format. Includes a thin playground wrapper with planning-specific UI (phase controls, agent assignment, KPI bar, agent callback bridge) and an "Open in tldraw" button for standalone editing.
Install
npx vskill@latest install b-open-io/gemskills/visual-plannerSKILL.md
Visual Planner
Create visual workflow diagrams using tldraw's .tldr format. Covers agent orchestration, data pipelines, system architecture, and any multi-step process. Diagrams open in a playground app built on the tldraw React component — no iframe, no external service.
Architecture
The visual planner generates .tldr files directly. tldraw is embedded as an npm package (bun add tldraw) in our playground app — a React component with full programmatic API access.
When to Use
- Designing or documenting a multi-agent system
- Mapping a data pipeline with branching and parallel stages
- Planning system architecture before implementation
- Running a Plan-Code Loop: tracking which nodes are planned, in progress, implemented, or need revision
- Any time a workflow needs to be communicated visually
Phase 1: Discovery & Diagram Design
Read `references/diagram-thinking.md` before starting. The biggest source of bad diagrams is skipping the design reasoning and jumping straight to shapes.
Step 1a: Define the Diagram's Question
Before gathering any nodes/edges, define the single question this diagram answers. If the question contains "and", you need multiple diagrams.
Examples:
- "How do requests flow from a visitor to the right bot?" (good — one question)
- "Show the whole system architecture and the data flow" (bad — two questions, two diagrams)
Step 1b: Choose Abstraction Level
Pick one C4 level per diagram:
- Context (L1): The system as one box + its external world. 4-6 nodes.
- Container (L2): Deployable units (bots, APIs, databases). 8-15 nodes. Default for agent systems.
- Component (L3): Internals of one container. 6-10 nodes.
Step 1c: Gather the Graph
Ask (one round, then generate):
- Purpose — What does this system do? Who is the audience for this diagram?
- Nodes — What are the main components at the chosen abstraction level? For each: name, responsibility, type (supervisor, worker, human checkpoint, tool, external system).
- Edges — How do nodes connect? Choose one arrow semantic: data flow, control flow, or dependency. What's the happy path spine?
- Groupings — What nodes belong together? Use frames for teams, deployment zones, or domain boundaries.
- Fan trap check — Does any node connect to 5+ others? If so, add intermediate groupings.
- Phase tracking — Is this for active development? Assign phases:
planned,in_progress,implemented,needs_revision.
Step 1d: Plan Visual Design
Before writing shapes JSON:
- Estimate node count. Target 7-12. If 13+, plan frame groupings. If 20+, split into multiple diagrams.
- Identify the happy path. This should form a clear top-to-bottom or left-to-right spine.
- Plan the legend. What do your colors, shapes, and line styles mean?
- Use arrow styling hierarchy. Solid for primary flow, dashed for conditional, dotted for return/monitoring. See
references/design-system.md. - Plan sticky notes. Use
noteshapes for context like "30-min TTL", "Uses Claude Sonnet 4.6", "Needs retry logic" — don't cram everything into node labels.
For agent systems, check if nodes map to the core roster. Assign the agent field when there is a clear match.
See references/workflow-patterns.md for common topologies and references/diagram-thinking.md for the full design reasoning guide.
Phase 2: Generate .tldr
Translate the discovery conversation into a .tldr file using the create_diagram.ts script. Place the file in the project: <project-dir>/docs/architecture/workflow.tldr.
The script handles all the hard parts: arrow bindings, richText wrapping, fractional indices from @tldraw/utils, and auto-layout via dagre. You describe nodes and edges — the tooling produces a correct diagram.
Step 2a: Define the Graph Structure
Write a focused shapes JSON array with nodes and edges. You can omit x/y when using --layout auto:
Save as shapes.json.
Step 2b: Generate with Auto-Layout
The --layout auto flag runs dagre (top-to-bottom DAG layout) and computes all node positions automatically. Use this whenever the diagram has more than 2-3 nodes or you don't want to compute coordinates manually.
The script auto-validates the output after writing. Validation results are printed to stderr. The script exits with code 1 if there are errors — fix them before opening the playground. Pass --no-validate to skip validation.
To skip the separate playground launch step, add --open:
This generates the diagram, validates it, and launches the playground in one step.
Manual Layout (Precise Positioning)
When you need exact control over positions, provide x/y for every shape and use --layout manual (the default):
Spacing constants for manual layouts:
| Element | Size | |
|---|---|---|
| Node width | 200 px | |
| Node height | 80 px | |
| Horizontal gap | 150 px | |
| Vertical gap | 120 px | |
| Frame padding | 40 px |
Prefer kind: "arc" arrows (the default). Only use kind: "elbow" when nodes have at least 80 px of gap for routing headroom.
Node Mapping
| Node concept | _type | color | fill | size | |
|---|---|---|---|---|---|
| Supervisor / Primary | rectangle | violet | solid | 220x80 | |
| Worker | rectangle | blue | solid | 200x80 | |
| Human-in-loop | diamond | yellow | solid | 160x100 | |
| Tool/API/External | cloud | light-blue | solid | 200x80 | |
| Decision | diamond | orange | solid | 160x100 | |
| Start | ellipse | green | solid | 60x60 | |
| End | ellipse | red | solid | 60x60 | |
| Annotation | note | yellow | — | auto-sized | |
| Standalone label | text | black | — | auto-sized | |
| External system (out of scope) | rectangle | grey | semi | 160x60 |
Arrow Styling
Use dash patterns and colors to create visual hierarchy:
| Relationship | dash | color | When to use | |
|---|---|---|---|---|
| Primary flow | solid | black | Happy path, main request flow | |
| Conditional dispatch | dashed | black | Supervisor routing to workers | |
| Return / response | dotted | grey | Worker reporting results back | |
| Error / rejection | dashed | orange | Failed validation, loop-back | |
| Async / event-driven | dashed | blue | Message queue, webhooks | |
| Monitoring / heartbeat | dotted | light-blue | Health checks, metrics, crons |
Phase Colors
| Phase | color | |
|---|---|---|
| Planned | grey | |
| In Progress | blue | |
| Implemented | green | |
| Needs Revision | orange |
Planning Metadata in note / meta
Pass planning-specific data via the note field (stored in meta.note) or directly embed meta keys using raw .tldr. The note field is the simplest way to annotate shapes in focused format:
Using Frames for Organization
Group related nodes into frames. List child shape IDs in the children array. With --layout auto, the frame is sized automatically to contain its children:
See references/tldraw-best-practices.md for arrow binding internals, valid style values, fractional indexing details, and raw .tldr pitfalls (only relevant if you write .tldr JSON directly instead of using focused shapes).
Phase 3: Open in Playground (REQUIRED)
IMPORTANT: The playground is the primary output of this skill. ALWAYS launch the playground after generating a .tldr file. Do NOT fall back to rendering an SVG — the whole point is the interactive tldraw canvas.
If you used --open with create_diagram.ts, the playground is already launching. Otherwise, start it manually:
Dependencies are auto-installed on first run. The playground opens in the browser automatically. If port 3458 is already in use, the server will attempt to free it or pick the next available port.
The playground provides:
- Full tldraw canvas (drag, zoom, draw, edit shapes)
- Planning panel: phase selector, agent assignment, model/tools config
- KPI bar: node counts by phase, completion percentage
- Save button (normal mode): writes diagram state back to the
.tldrfile; user then tells the agent about changes - Send to Agent button (async mode,
--wait-signal): returns diagram state inline to the waiting agent - "Open in tldraw" button: opens the
.tldrfile in standalone tldraw for full editing - MCP connectivity indicator: shows whether tldraw MCP server is available (optional, not required)
Playground Interaction Modes
The playground shows a different action button depending on how it was launched:
Normal mode (default — no --wait-signal):
The bottom-right button says "Save". Clicking it writes the current diagram state back to the .tldr file. A brief "Saved to file" confirmation appears. After saving, the user can simply tell the agent: "I saved my changes" or "it looks correct to me", and the agent can re-read the .tldr file to pick up the updates.
Async mode (--wait-signal — agent awaiting callback):
This is the start of the file. Read the full SKILL.md on GitHub.
Security
- Security scanPassed, 100 of 100Pattern checks on the skill's files.
- Model reviewPassed
Quality evaluation
- Task evaluationNot runNo evaluation yet. Run one in Skill Studio.
Source
- SKILL.md in the repositoryCheckingskills/visual-planner/SKILL.md
Popularity
- Repository stars
- 3
- 7-day trend score
- 7
Stars and forks are for the whole GitHub repository, not this skill alone. Refreshed 1 May 2026, 6 months ago.
Works with
Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.
- Claude Code
- Cursor
- GitHub Copilot
- Windsurf
- Codex
- Gemini CLI
- Cline
- Amp
- Roo Code
- Goose
- Continue
- Kilo Code
- Junie
- Trae
- OpenHands
- Qwen Code
- AI Agent
- Tabnine Chat
- Sourcegraph Cody
- Amazon Q
- Firebase Genkit
- Sweep
- Devin
- Phind
- Mentat
- Claude Desktop
- Aider
- GPT Pilot
- Plandex
- bolt.new
- v0
- Replit Agent
- Anse
- TypingMind
- BetterChatGPT
- LibreChat
- Warp AI
- Pieces
- Fig AI
Embed badge
[](https://verified-skill.com/skills/b-open-io/gemskills/visual-planner)