Goal
SkillDev toolsGenerate a Graphviz legend template for causal knowledge graphs with node types and edge styles
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Goal skill
What this skill tells your AI
The instructions your AI receives, as published by causify-ai/helpers in .claude/skills/graphviz.generate_legend/SKILL.md and read by ahel’s review.
- Generate a Graphviz legend for causal knowledge graphs, covering node types and edge styles
Templates
Node Legend
digraph WindTurbineCKG {
rankdir=LR;
splines=true;
nodesep=0.8;
ranksep=1.2;
bgcolor="white";
subgraph cluster_legend {
label="Legend: Node Types";
fontsize=11;
fontname="Helvetica";
color=gray70;
style="rounded,dashed";
bgcolor="white";
// Put every legend node on the SAME rank (same vertical alignment)
{ rank=same;
leg_exog; leg_op; leg_latent; leg_obs; leg_health; leg_out;
}
leg_exog [label="Exogenous /\nEnvironmental", shape=ellipse, style=filled, fontcolor=black, color=royalblue4, fillcolor=lightsteelblue1];
leg_op [label="Operational /\nMechanism", shape=box, style="rounded,filled,solid", fontcolor=black, color=darkgreen, fillcolor=palegreen1];
leg_latent [label="Latent /\nHidden State", shape=box, style="filled,dashed", fontcolor=gray40, color=gray40, fillcolor=gray90];
leg_obs [label="Observable\nSignal", shape=ellipse, style=filled, fontcolor=black, color=darkgreen, fillcolor=palegreen1];
leg_health [label="Health\nIndicator", shape=ellipse, style=filled, fontcolor=black, color=gray40, fillcolor=gray90];
leg_out [label="Outcome /\nTarget", shape=box, penwidth=2, style=filled, fontcolor=black, color=darkorange3, fillcolor=moccasin];
// Keep left-to-right ordering without changing ranks
leg_exog -> leg_op [style=invis, weight=10];
leg_op -> leg_latent [style=invis, weight=10];
leg_latent -> leg_obs [style=invis, weight=10];
leg_obs -> leg_health [style=invis, weight=10];
leg_health -> leg_out [style=invis, weight=10];
}
}
Edge Legend
digraph legend {
graph [rankdir=TB, nodesep=0.5, ranksep=0.7];
node [shape=point, width=0, height=0, margin=0];
edge [dir=forward];
// Row 1: Direct causation
{
rank=same;
a1 [label="", style=invis];
b1 [label="", style=invis];
t1 [shape=plaintext, style=solid, label="Direct causation", fontsize=16, fontname="Arial"];
a1 -> b1 [style=solid, color=black, penwidth=3, arrowsize=1.2, minlen=3];
b1 -> t1 [style=invis, minlen=1];
}
// Row 2: Uncertain/hypothesized causation
{
rank=same;
a2 [label="", style=invis];
b2 [label="", style=invis];
t2 [shape=plaintext, style=solid, label="Uncertain / hypothesized causation", fontsize=16, fontname="Arial"];
a2 -> b2 [style=dotted, color=black, penwidth=2, arrowsize=1.0, minlen=3];
b2 -> t2 [style=invis, minlen=1];
}
// Row 3: Correlation/association
{
rank=same;
a3 [label="", style=invis];
b3 [label="", style=invis];
t3 [shape=plaintext, style=solid, label="Correlation / association (non-causal)", fontsize=16, fontname="Arial"];
a3 -> b3 [style=dotted, color=gray50, penwidth=2, arrowhead=none, minlen=3];
b3 -> t3 [style=invis, minlen=1];
}
// Row 4: Positive effect
{
rank=same;
a4 [label="", style=invis];
b4 [label="", style=invis];
t4 [shape=plaintext, style=solid, label="Positive effect (+ / ++ / +++)", fontsize=16, fontname="Arial"];
a4 -> b4 [style=solid, color="#228B22", penwidth=3, arrowsize=1.2, minlen=3];
b4 -> t4 [style=invis, minlen=1];
}
// Row 5: Negative effect
{
rank=same;
a5 [label="", style=invis];
b5 [label="", style=invis];
t5 [shape=plaintext, style=solid, label="Negative effect (- / -- / ---)", fontsize=16, fontname="Arial"];
a5 -> b5 [style=solid, color="#DC143C", penwidth=3, arrowsize=1.2, minlen=3];
b5 -> t5 [style=invis, minlen=1];
}
// Row 6: Strength encoding - using <-> instead of Unicode
{
rank=same;
a6 [label="", style=invis];
b6 [label="", style=invis];
t6 [shape=plaintext, style=solid, label="Strength encoding (weak <-> strong)", fontsize=16, fontname="Arial"];
a6 -> b6 [style=solid, color="#228B22", penwidth=3, arrowsize=1.2, minlen=3];
b6 -> t6 [style=invis, minlen=1];
}
// Force vertical ordering and left alignment
a1 -> a2 -> a3 -> a4 -> a5 -> a6 [style=invis];
b1 -> b2 -> b3 -> b4 -> b5 -> b6 [style=invis];
}
Verification
- Render each template with
dot -Tpngand confirm it produces a valid image with no syntax errors - Confirm the legend covers every node type and edge style used in the target graph
Signals
- GitHub stars
- 145
- Forks
- 160
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
graphviz-generate-legend- Source
- github.com/causify-ai/helpers