[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1S423VN3488ZP4SWJK1RJ":3,"skill-same:01M6F1S423VN3488ZP4SWJK1RJ":55},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":28,"linkOnly":29,"markdownContent":30,"markdownBody":31,"frontMatter":32,"refName":33,"commitSha":34,"skillDirectory":35,"forksCount":36,"repositoryHtmlUrl":37,"repositoryHomepageUrl":38,"ownerHtmlUrl":39,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":40,"install":41,"resources":54},"01M6F1S423VN3488ZP4SWJK1RJ","graphviz.generate_legend",null,"Generate a Graphviz legend template with node types and edge styles","causify-ai\u002Fhelpers","causify-ai","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121828442?v=4","01M6BZFTHW2MQR7FWK8CDW0DRA","Causify.AI","01M6F1K6CCKKF8YKTBN4ZV509G",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgraphviz.generate_legend\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27],"generate","graphviz generate legend","edge","template","haiku","node","styles","types","with","2026-11-10 10:12:30",false,"---\ndescription: Generate a Graphviz legend template with node types and edge styles\nmodel: haiku\n---\n\n# Goal\n- Generate a Graphviz legend for causal knowledge graphs, covering node types\n  and edge styles\n\n# Templates\n\n## Node Legend\n```dot\ndigraph WindTurbineCKG {\n  rankdir=LR;\n  splines=true;\n  nodesep=0.8;\n  ranksep=1.2;\n  bgcolor=\"white\";\n\nsubgraph cluster_legend {\n  label=\"Legend: Node Types\";\n  fontsize=11;\n  fontname=\"Helvetica\";\n  color=gray70;\n  style=\"rounded,dashed\";\n  bgcolor=\"white\";\n\n  \u002F\u002F Put every legend node on the SAME rank (same vertical alignment)\n  { rank=same;\n    leg_exog; leg_op; leg_latent; leg_obs; leg_health; leg_out;\n  }\n\n  leg_exog   [label=\"Exogenous \u002F\\nEnvironmental\", shape=ellipse, style=filled, fontcolor=black, color=royalblue4, fillcolor=lightsteelblue1];\n  leg_op     [label=\"Operational \u002F\\nMechanism\", shape=box, style=\"rounded,filled,solid\", fontcolor=black, color=darkgreen, fillcolor=palegreen1];\n  leg_latent [label=\"Latent \u002F\\nHidden State\", shape=box, style=\"filled,dashed\", fontcolor=gray40, color=gray40, fillcolor=gray90];\n  leg_obs    [label=\"Observable\\nSignal\", shape=ellipse, style=filled, fontcolor=black, color=darkgreen, fillcolor=palegreen1];\n  leg_health [label=\"Health\\nIndicator\", shape=ellipse, style=filled, fontcolor=black, color=gray40, fillcolor=gray90];\n  leg_out    [label=\"Outcome \u002F\\nTarget\", shape=box, penwidth=2, style=filled, fontcolor=black, color=darkorange3, fillcolor=moccasin];\n\n  \u002F\u002F Keep left-to-right ordering without changing ranks\n  leg_exog   -> leg_op     [style=invis, weight=10];\n  leg_op     -> leg_latent [style=invis, weight=10];\n  leg_latent -> leg_obs    [style=invis, weight=10];\n  leg_obs    -> leg_health [style=invis, weight=10];\n  leg_health -> leg_out    [style=invis, weight=10];\n}\n\n}\n```\n\n## Edge Legend\n```dot\ndigraph legend {\n    graph [rankdir=TB, nodesep=0.5, ranksep=0.7];\n    node [shape=point, width=0, height=0, margin=0];\n    edge [dir=forward];\n\n    \u002F\u002F Row 1: Direct causation\n    {\n        rank=same;\n        a1 [label=\"\", style=invis];\n        b1 [label=\"\", style=invis];\n        t1 [shape=plaintext, style=solid, label=\"Direct causation\", fontsize=16, fontname=\"Arial\"];\n        a1 -> b1 [style=solid, color=black, penwidth=3, arrowsize=1.2, minlen=3];\n        b1 -> t1 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 2: Uncertain\u002Fhypothesized causation\n    {\n        rank=same;\n        a2 [label=\"\", style=invis];\n        b2 [label=\"\", style=invis];\n        t2 [shape=plaintext, style=solid, label=\"Uncertain \u002F hypothesized causation\", fontsize=16, fontname=\"Arial\"];\n        a2 -> b2 [style=dotted, color=black, penwidth=2, arrowsize=1.0, minlen=3];\n        b2 -> t2 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 3: Correlation\u002Fassociation\n    {\n        rank=same;\n        a3 [label=\"\", style=invis];\n        b3 [label=\"\", style=invis];\n        t3 [shape=plaintext, style=solid, label=\"Correlation \u002F association (non-causal)\", fontsize=16, fontname=\"Arial\"];\n        a3 -> b3 [style=dotted, color=gray50, penwidth=2, arrowhead=none, minlen=3];\n        b3 -> t3 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 4: Positive effect\n    {\n        rank=same;\n        a4 [label=\"\", style=invis];\n        b4 [label=\"\", style=invis];\n        t4 [shape=plaintext, style=solid, label=\"Positive effect (+ \u002F ++ \u002F +++)\", fontsize=16, fontname=\"Arial\"];\n        a4 -> b4 [style=solid, color=\"#228B22\", penwidth=3, arrowsize=1.2, minlen=3];\n        b4 -> t4 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 5: Negative effect\n    {\n        rank=same;\n        a5 [label=\"\", style=invis];\n        b5 [label=\"\", style=invis];\n        t5 [shape=plaintext, style=solid, label=\"Negative effect (- \u002F -- \u002F ---)\", fontsize=16, fontname=\"Arial\"];\n        a5 -> b5 [style=solid, color=\"#DC143C\", penwidth=3, arrowsize=1.2, minlen=3];\n        b5 -> t5 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 6: Strength encoding - using \u003C-> instead of Unicode\n    {\n        rank=same;\n        a6 [label=\"\", style=invis];\n        b6 [label=\"\", style=invis];\n        t6 [shape=plaintext, style=solid, label=\"Strength encoding (weak \u003C-> strong)\", fontsize=16, fontname=\"Arial\"];\n        a6 -> b6 [style=solid, color=\"#228B22\", penwidth=3, arrowsize=1.2, minlen=3];\n        b6 -> t6 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Force vertical ordering and left alignment\n    a1 -> a2 -> a3 -> a4 -> a5 -> a6 [style=invis];\n    b1 -> b2 -> b3 -> b4 -> b5 -> b6 [style=invis];\n}\n```\n\n# Verification\n- [ ] Render each template with `dot -Tpng` and confirm it produces a valid\n      image with no syntax errors\n- [ ] Confirm the legend covers every node type and edge style used in the\n      target graph\n","# Goal\n- Generate a Graphviz legend for causal knowledge graphs, covering node types\n  and edge styles\n\n# Templates\n\n## Node Legend\n```dot\ndigraph WindTurbineCKG {\n  rankdir=LR;\n  splines=true;\n  nodesep=0.8;\n  ranksep=1.2;\n  bgcolor=\"white\";\n\nsubgraph cluster_legend {\n  label=\"Legend: Node Types\";\n  fontsize=11;\n  fontname=\"Helvetica\";\n  color=gray70;\n  style=\"rounded,dashed\";\n  bgcolor=\"white\";\n\n  \u002F\u002F Put every legend node on the SAME rank (same vertical alignment)\n  { rank=same;\n    leg_exog; leg_op; leg_latent; leg_obs; leg_health; leg_out;\n  }\n\n  leg_exog   [label=\"Exogenous \u002F\\nEnvironmental\", shape=ellipse, style=filled, fontcolor=black, color=royalblue4, fillcolor=lightsteelblue1];\n  leg_op     [label=\"Operational \u002F\\nMechanism\", shape=box, style=\"rounded,filled,solid\", fontcolor=black, color=darkgreen, fillcolor=palegreen1];\n  leg_latent [label=\"Latent \u002F\\nHidden State\", shape=box, style=\"filled,dashed\", fontcolor=gray40, color=gray40, fillcolor=gray90];\n  leg_obs    [label=\"Observable\\nSignal\", shape=ellipse, style=filled, fontcolor=black, color=darkgreen, fillcolor=palegreen1];\n  leg_health [label=\"Health\\nIndicator\", shape=ellipse, style=filled, fontcolor=black, color=gray40, fillcolor=gray90];\n  leg_out    [label=\"Outcome \u002F\\nTarget\", shape=box, penwidth=2, style=filled, fontcolor=black, color=darkorange3, fillcolor=moccasin];\n\n  \u002F\u002F Keep left-to-right ordering without changing ranks\n  leg_exog   -> leg_op     [style=invis, weight=10];\n  leg_op     -> leg_latent [style=invis, weight=10];\n  leg_latent -> leg_obs    [style=invis, weight=10];\n  leg_obs    -> leg_health [style=invis, weight=10];\n  leg_health -> leg_out    [style=invis, weight=10];\n}\n\n}\n```\n\n## Edge Legend\n```dot\ndigraph legend {\n    graph [rankdir=TB, nodesep=0.5, ranksep=0.7];\n    node [shape=point, width=0, height=0, margin=0];\n    edge [dir=forward];\n\n    \u002F\u002F Row 1: Direct causation\n    {\n        rank=same;\n        a1 [label=\"\", style=invis];\n        b1 [label=\"\", style=invis];\n        t1 [shape=plaintext, style=solid, label=\"Direct causation\", fontsize=16, fontname=\"Arial\"];\n        a1 -> b1 [style=solid, color=black, penwidth=3, arrowsize=1.2, minlen=3];\n        b1 -> t1 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 2: Uncertain\u002Fhypothesized causation\n    {\n        rank=same;\n        a2 [label=\"\", style=invis];\n        b2 [label=\"\", style=invis];\n        t2 [shape=plaintext, style=solid, label=\"Uncertain \u002F hypothesized causation\", fontsize=16, fontname=\"Arial\"];\n        a2 -> b2 [style=dotted, color=black, penwidth=2, arrowsize=1.0, minlen=3];\n        b2 -> t2 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 3: Correlation\u002Fassociation\n    {\n        rank=same;\n        a3 [label=\"\", style=invis];\n        b3 [label=\"\", style=invis];\n        t3 [shape=plaintext, style=solid, label=\"Correlation \u002F association (non-causal)\", fontsize=16, fontname=\"Arial\"];\n        a3 -> b3 [style=dotted, color=gray50, penwidth=2, arrowhead=none, minlen=3];\n        b3 -> t3 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 4: Positive effect\n    {\n        rank=same;\n        a4 [label=\"\", style=invis];\n        b4 [label=\"\", style=invis];\n        t4 [shape=plaintext, style=solid, label=\"Positive effect (+ \u002F ++ \u002F +++)\", fontsize=16, fontname=\"Arial\"];\n        a4 -> b4 [style=solid, color=\"#228B22\", penwidth=3, arrowsize=1.2, minlen=3];\n        b4 -> t4 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 5: Negative effect\n    {\n        rank=same;\n        a5 [label=\"\", style=invis];\n        b5 [label=\"\", style=invis];\n        t5 [shape=plaintext, style=solid, label=\"Negative effect (- \u002F -- \u002F ---)\", fontsize=16, fontname=\"Arial\"];\n        a5 -> b5 [style=solid, color=\"#DC143C\", penwidth=3, arrowsize=1.2, minlen=3];\n        b5 -> t5 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Row 6: Strength encoding - using \u003C-> instead of Unicode\n    {\n        rank=same;\n        a6 [label=\"\", style=invis];\n        b6 [label=\"\", style=invis];\n        t6 [shape=plaintext, style=solid, label=\"Strength encoding (weak \u003C-> strong)\", fontsize=16, fontname=\"Arial\"];\n        a6 -> b6 [style=solid, color=\"#228B22\", penwidth=3, arrowsize=1.2, minlen=3];\n        b6 -> t6 [style=invis, minlen=1];\n    }\n\n    \u002F\u002F Force vertical ordering and left alignment\n    a1 -> a2 -> a3 -> a4 -> a5 -> a6 [style=invis];\n    b1 -> b2 -> b3 -> b4 -> b5 -> b6 [style=invis];\n}\n```\n\n# Verification\n- [ ] Render each template with `dot -Tpng` and confirm it produces a valid\n      image with no syntax errors\n- [ ] Confirm the legend covers every node type and edge style used in the\n      target graph\n",{"model":23,"description":7},"master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Fgraphviz.generate_legend",1,"https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers","https:\u002F\u002Fcausify-ai.github.io\u002Fhelpers\u002F","https:\u002F\u002Fgithub.com\u002Fcausify-ai","2026-11-02 21:54:29",{"source":8,"skillName":5,"commands":42,"prompt":52,"zipAvailable":53},[43,46,49],{"tool":44,"command":45},"npx","npx skills add causify-ai\u002Fhelpers --skill graphviz.generate_legend",{"tool":47,"command":48},"bunx","bunx skills add causify-ai\u002Fhelpers --skill graphviz.generate_legend",{"tool":50,"command":51},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill graphviz.generate_legend","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgraphviz.generate_legend\u002FSKILL.md",true,[],[56,76,94,106,115,129],{"skillNo":57,"name":58,"nameZh":6,"description":59,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":60,"categories":61,"keywords":67,"publishedAt":28},"01M6F209RASRBEK7GBNG5M00K0","tutorial_in_60_mins.propagate_docker_changes","Sync tutorial and class-project Docker files to match project_template","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.propagate_docker_changes\u002FSKILL.md",[62],{"categoryNo":63,"categoryName":64,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[68,69,70,71,22,72,23,73,74,75],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","sync","files","project","match",{"skillNo":77,"name":78,"nameZh":6,"description":79,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":80,"categories":81,"keywords":85,"publishedAt":28},"01M6F207XZ5YDAJ0KNDRE6EN0R","tutorial_in_60_mins.merge_markdown","Merge the content of a markdown file into a Jupyter notebook","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.merge_markdown\u002FSKILL.md",[82],{"categoryNo":83,"categoryName":84,"taxonomyType":65,"taxonomyTypeDesc":66},"01JBSEEDCAT000000000000002","文档处理",[86,87,69,88,89,90,23,91,92,93],"markdown","merge","tutorial in 60 mins merge markdown","notebook","jupyter","file","jupyter notebook","content",{"skillNo":95,"name":96,"nameZh":6,"description":97,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":98,"categories":99,"keywords":100,"publishedAt":28},"01M6F2059X95Q1A13HD67E9JRF","tutorial_in_60_mins.format","Format a directory to follow the \"Learn X in 60 Minutes\" tutorial conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.format\u002FSKILL.md",[],[101,69,102,103,104,23,105],"tutorial in 60 mins format","format","directory","learn","conventions",{"skillNo":107,"name":108,"nameZh":6,"description":109,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":110,"categories":111,"keywords":112,"publishedAt":28},"01M6F202MDHMNYD5S1YHG2PKZD","tutorial_in_60_mins.create","Create a tutorial directory for the Learn X in 60 Minutes conventions","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftutorial_in_60_mins.create\u002FSKILL.md",[],[113,69,114,104,103,105],"tutorial in 60 mins create","create",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":28},"01M6F2004BW13GQ59N3RGSAYVN","todo.reorg_in_progress","Reorganize ai_task_queue.md so in-progress tasks, not-started tasks, and mislabeled topic headers sit under the right H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_in_progress\u002FSKILL.md",[],[122,123,124,125,126,127,128],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":135,"publishedAt":28},"01M6F1ZXN0G6HBD08GT8HE5FYA","todo.reorg_headers","Reorganize ai_task_queue.md .md so every H2 topic matches ALL TOPICS and every H3 task sits under the right topic, keeping its H1 stage","https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Ftodo.reorg_headers\u002FSKILL.md",[],[136,123,126,127,128],"todo reorg headers"]