From schematic-diagram
Generates a clean, well-structured Graphviz circuit/schematic diagram (DOT + SVG + PNG) from a natural-language description of components and wiring. Use this skill whenever the user describes an electronic circuit, schematic, or wiring layout and wants a visual diagram — even if they say "Schaltplan erstellen", "draw my circuit", "visualize my wiring", "Blockschaltbild", or just paste a list of components and connections without naming a tool. Trigger on: circuit descriptions with components (MCU, SBC, transistors, ICs, LEDs, sensors, motors, relays, motor drivers, encoders, H-bridges, DC-DC converters, solar panels, battery management, communication buses, pin names, or connection lists).
How this skill is triggered — by the user, by Claude, or both
Slash command
/schematic-diagram:schematic-diagramThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Turn a natural-language circuit description into a clean Graphviz DOT file, render it as SVG
Turn a natural-language circuit description into a clean Graphviz DOT file, render it as SVG and PNG, and save all three to the working directory.
Read the full schematic description and extract:
Pick the archetype that best matches the circuit, then arrange functional groups left → right:
[Source (PV/battery)] → [Conversion/management] → [Switching stage] → [Loads]
Use when the dominant story is where power comes from and how it is switched/converted. Examples: solar charger, MPPT + relay management, precharge circuit, DC-DC converter chain.
[Sensors / inputs] → [MCU / controller] → [Drivers] → [Actuators]
Use when an MCU processes inputs and drives outputs. Examples: motor controller, robot drive system, PID loop, Arduino + H-bridge.
[Board A (e.g. Pi)] ←serial/I2C→ [Board B (e.g. MEGA)] ←GPIO→ [Board C (Pro Mini)]
Arrange boards as peer columns; connect with labelled bus edges. Use when several MCUs/SBCs exchange data.
[Peripheral 1]
[Peripheral 2] ←── I2C/SPI bus ──→ [MCU / bus master]
[Peripheral 3]
Use when one bus ties many peripherals to one master (I2C sensors, SPI devices).
Combine archetypes: place the energy/power layer at the top of the diagram (using
subgraph cluster_power) and the control/signal layer below it. Connect them with
power-supply edges.
Each functional group becomes a subgraph cluster_X { … }. Flat clusters are usually
better than deeply nested ones.
digraph <CamelCaseName> {
graph [
rankdir=LR
fontname="Arial"
fontsize=14
label="<Human-readable title>"
labelloc=t
labeljust=c
splines=spline // spline avoids the edge-through-cluster problem of ortho; curved is incompatible with taillabel/headlabel
nodesep=0.9
ranksep=2.0
compound=true
bgcolor=white
pad=0.8
]
node [fontname="Arial" fontsize=10 style="filled,rounded" shape=box margin="0.2,0.12"]
edge [
fontname="Arial"
fontsize=9
penwidth=1.5
labelfontsize=9
labeldistance=2.4
labelangle=25
]
}
A single global GND node creates a fan of long, crossing lines. Instead declare one GND symbol per cluster and connect it locally:
// declare all at once after the global node defaults
node [shape=invtriangle style=filled fillcolor="#444444" fontcolor=white
fontsize=8 width=0.4 height=0.28 margin="0.04,0.04" label="GND"]
gnd_pwr gnd_ctrl gnd_mcu gnd_drv gnd_sens
// then restore normal node style
node [shape=box style="filled,rounded" fontsize=10 fontcolor=black margin="0.2,0.12"]
Each cluster uses only its own GND symbol.
| Functional role | fillcolor | color (border) |
|---|---|---|
| Energy source (PV, battery) | #FFF8E1 | #E65100 |
| Power conversion (MPPT, DC-DC, reg) | #FCE4EC | #880E4F |
| Switching / relay stage | #E3F2FD | #1565C0 |
| MCU / microcontroller / SBC | #E8F5E9 | #2E7D32 |
| Motor driver / H-bridge / ULN | #FFF3E0 | #E65100 |
| Actuator (motor, brush, servo) | #FBE9E7 | #BF360C |
| Sensor / measurement / ADC | #F3E5F5 | #6A1B9A |
| Communication / display | #E0F2F1 | #00695C |
| Intermediate power rail ◇ | #FFF3CD | #CC7700 |
Choose the role that best describes each cluster. It is fine to use the same color for two clusters of the same role.
RAIL_5V [
label="5 V Rail\n(XL4015 out)"
shape=diamond
fillcolor="#FFF3CD" color="#CC7700" penwidth=2.8
width=2.0 height=1.0 fontsize=10
]
| Component type | Recommended shape / notes |
|---|---|
| MCU, Arduino, SBC (Pi, MEGA) | shape=box — large: width=2.0–2.8 height=1.4–1.8 |
| Simple IC (timer, driver) | shape=box — medium: width=1.6–2.0 height=1.0–1.4 |
| Relay (bistable or standard) | shape=box — add coil/contact info in label |
| H-bridge / motor driver | shape=box — label includes EN/PWM pins |
| DC-DC converter | shape=box — label: input/output voltages |
| Battery / accumulator | shape=cylinder width=1.1 height=1.2 |
| Solar panel | shape=box — label: Vmp, Wp |
| Passive (R, C, L) | shape=box — small: width=0.9 height=0.7 |
| LED / indicator | shape=ellipse width=1.1 height=0.7 |
| Transistor (BJT, MOSFET) | shape=box width=1.5 height=1.1 |
| Encoder / end switch | shape=box — small, note signal type in label |
| Display (OLED, LCD) | shape=box width=1.8 height=1.0 |
| Current / voltage sensor | shape=box — label with I2C address if known |
Every edge must carry taillabel (pin at source) and headlabel (pin at destination).
Match labelfontcolor to the edge color:
// GPIO control signal
ProMini -> ULN2003 [
taillabel="D7 (R3_SET)" headlabel="IN3"
color="#1565C0" penwidth=2 labelfontcolor="#1565C0"
]
// Serial bus between boards
RPi -> MEGA [
taillabel="TX (GPIO14)" headlabel="RX0"
color="#00695C" style=dashed penwidth=2 labelfontcolor="#00695C"
label="UART 115200"
]
| Net / signal type | color | style |
|---|---|---|
| High-power supply (battery, PV) | #E65100 | solid |
| Regulated / switched power | #CC7700 | solid |
| Motor drive / PWM output | #BF360C | solid |
| Control / GPIO / relay coil | #1565C0 | solid |
| I2C / SPI bus | #00695C | dashed |
| UART / Serial | #00838F | dashed |
| Analog signal / ADC input | #6A1B9A | solid |
| Encoder / quadrature | #4527A0 | solid |
| Generic data bus | #2E7D32 | dashed |
| GND return | #444444 | solid |
When power bypasses the normal left-to-right flow (e.g. battery feeds a load directly),
add constraint=false to avoid rank distortion:
BAT -> MEGA [
taillabel="12 V+" headlabel="VIN"
color="#E65100" penwidth=2 labelfontcolor="#E65100"
constraint=false
]
MEGA -> INA260 [
taillabel="SDA/SCL" headlabel="SDA/SCL (0x40)"
color="#00695C" style=dashed penwidth=2 labelfontcolor="#00695C"
label="I2C"
]
For bistable relays, include SET/RST coil pins in the label:
R1 [
label="Relay R1\n(bistable 12 V)\nSET←R1_SET | RST←R1_RST\nSwitches: PV → Victron"
shape=box width=2.2 height=1.3
fillcolor="#E3F2FD" color="#1565C0" penwidth=2
]
MANDATORY: use the system
dotbinary (graphviz package) — nothing else. Do NOT use viz.js, npm, node, cairosvg, or any other rendering tool. Do NOT create /tmp/viz_test or any npm project. The only permitted commands aredot -Tsvg …anddot -Tpng ….
which dot 2>/dev/null && dot -V 2>&1 || echo "GRAPHVIZ_MISSING"
If the output contains GRAPHVIZ_MISSING:
Stop immediately. Do not write any file. Tell the user:
Graphviz ist noch nicht installiert. Bitte tippe diesen Befehl direkt in den Chat (das
!-Präfix öffnet eine interaktive Shell mit Passwort-Prompt):
! sudo apt install -y graphvizSobald das erledigt ist, sag kurz "fertig" und ich rendere das Diagramm.
Wait for the user's confirmation, then re-run the which dot check before continuing.
dot -Tsvg <input.dot> -o <output.svg>
dot -Tpng -Gdpi=144 <input.dot> -o <output.png>
-Gdpi=144 gives 2× resolution — sufficient for screen and A4 print.
Save three files to the working directory (use a short, descriptive base name):
| File | Content |
|---|---|
<name>.dot | Editable DOT source |
<name>.svg | Scalable vector graphic |
<name>.png | Rasterized PNG (144 dpi) |
Report the file paths and briefly describe what was grouped into each cluster.
| Problem | Fix |
|---|---|
| Edges route through cluster boxes | Use splines=spline, not splines=ortho or curved |
| All GND lines converge messily | One local gnd_X per cluster |
| Battery → load edge bends backwards | Add constraint=false |
| Pin labels overlap nodes | Increase labeldistance (try 2.4–3.0) |
| Clusters overlap each other | Increase ranksep (try 2.0–2.5) |
| Labels too small to read | labelfontsize=9, render PNG at -Gdpi=144 or higher |
| Multi-board layout looks tangled | Use archetype C or D; make each board its own cluster |
| I2C/UART bus fans out messily | Group all bus edges from one cluster, use lhead/ltail |
Provides UI/UX resources: 50+ styles, color palettes, font pairings, guidelines, charts for web/mobile across React, Next.js, Vue, Svelte, Tailwind, React Native, Flutter. Aids planning, building, reviewing interfaces.
Fetches up-to-date documentation from Context7 for libraries and frameworks like React, Next.js, Prisma. Use for setup questions, API references, and code examples.
npx claudepluginhub tachy/claude-skills --plugin schematic-diagram