[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6F1RYKK5G79ZN0TAASP18WN":3,"skill-same:01M6F1RYKK5G79ZN0TAASP18WN":57},{"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":29,"linkOnly":30,"markdownContent":31,"markdownBody":32,"frontMatter":33,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":40,"ownerHtmlUrl":41,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":42,"install":43,"resources":56},"01M6F1RYKK5G79ZN0TAASP18WN","graphviz.causal_kg_style",null,"Generate a Graphviz DOT causal knowledge graph per causal inference conventions","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.causal_kg_style\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28],"graphviz causal kg style","style","inference","causal inference","generate","graph","knowledge graph","knowledge","dot","conventions","2026-11-10 10:12:30",false,"---\ndescription: Generate a Graphviz DOT causal knowledge graph per causal inference conventions\nmodel: opus\n---\n\nYou are an expert in causal inference and graphical models\n\nI will give you a description or an image and your task is to produce a\nGraphviz\u002FDOT representation of that graph that follows the rules below exactly\n\nThe resulting graph should allow a knowledgeable reader to\n\n- Distinguish causation from correlation at a glance\n- Identify exogenous vs endogenous variables\n- Identify latent vs observable variables\n- Recognize interventions and counterfactuals\n\nUse color to distinguish variable types consistently\n\n# Generate the DOT File\n\n## General Graph Rules\n- Use Graphviz DOT syntax\n- Use a directed graph (`digraph`)\n- Set `rankdir=LR` for left-to-right causal flow\n- Use both `color` (border) and `fillcolor` + `style=filled` to encode variable\n  type (do not rely on color alone; keep shape conventions too)\n\n## Node Representation Rules\n\n### Variable Type Colors (Required)\nUse these colors consistently for node borders\u002Ffills:\n\n- Exogenous variable: color=#408AB0, fillcolor=#EAF3F8\n- Endogenous variable: color=#62D4A4, fillcolor=#EAF9F3\n- Target variable: color=#F8D476, fillcolor=#FFF6DA\n- Latent (unobservable) variable: color=#183B4A, fillcolor=#E6EEF1\n- Intervened variable (do(X)): color=#DE5470, fillcolor=#FBE6EC\n- Counterfactual variable: color=#183B4A, fillcolor=#E6EEF1\n\n### Exogenous vs Endogenous vs Target\n- Exogenous variable (no causal parents)\n  - `shape=ellipse`\n  - `penwidth=2`\n  - Must be colored using the exogenous palette above\n- Endogenous variable (has at least one causal parent)\n  - `shape=box,rounded`\n  - `penwidth=1` (default)\n  - Must be colored using the endogenous palette above\n- Target variable (no descendants; under study)\n  - `shape=box`\n  - `penwidth=2`\n  - Must be colored using the target palette above\n\n### Observable vs Unobservable (Latent) Variables\n- Observable variable\n  - `style=filled,solid`\n  - Use the appropriate color palette for its type\n    (exogenous\u002Fendogenous\u002Ftarget\u002Fetc.)\n  - `fontcolor=black`\n- Unobservable \u002F latent variable\n  - `style=\"filled,dashed\"`\n  - Must use the latent palette above (`color=gray40`, `fillcolor=gray90`,\n    `fontcolor=gray40`)\n  - Keep the same shape rule based on exogenous\u002Fendogenous\u002Ftarget if known;\n    otherwise default to `shape=ellipse`\n\n### Special Node Types\n- Intervened variable (`do(X)`)\n  - `shape=doublecircle`\n  - Label must be `do(X)`\n  - `style=filled,solid`\n  - Must use the intervened palette above\n  - Incoming causal edges to `X` must be omitted\n- Counterfactual variable\n  - `style=\"filled,dotted\"`\n  - Must use the counterfactual palette above\n  - Label must include counterfactual context (e.g., `Y | do(X=1)`)\n\n## Edge Representation Rules\n\n### Causation\n- Direct causal effect\n  - Solid arrow (`->`)\n  - `style=solid`\n  - `dir=forward`\n  - Default `color=black` unless overridden by effect sign\u002Fstrength\n- Uncertain or hypothesized causation\n  - Dotted arrow (`style=dotted`)\n  - Must include `label=\"?\"`\n  - Use `color=gray30`\n\n### Correlation \u002F Association (Non-causal)\n- Correlation without causal claim\n  - Dashed edge\n  - No arrowheads (`dir=none`)\n  - Use `constraint=false`\n  - Label with a statistical symbol\n  - Use `color=gray50`\n\n### Effect Attributes (Optional)\n- Positive effect\n  - Default arrowhead\n  - Label `\"+\"`, `\"++\"`, `\"+++\"`\n  - Use `color=darkgreen`\n- Negative effect\n  - Default arrowhead\n  - Label `\"-\"`, `\"--\"`, `\"---\"`\n  - Use `color=firebrick3`\n- Effect strength (by symbols in the label)\n  - Strong: `+++`, `---`\n  - Weak: `+`, `-`\n\n## Confounding and Common Causes\n- Represent confounders explicitly\n  - Use a latent node with dashed gray styling (latent palette)\n  - Draw causal arrows from the confounder to each affected variable\n- Do not use correlation edges to represent confounding\n\n## Layout and Structure\n- Use subgraphs (clusters) when helpful\n  - Structural model vs observational associations\n  - Different time slices or mechanisms\n- Ensure correlation edges do not affect node ranking (`constraint=false`)\n\n# Save the File\n- Save the output in a `causal_graph.dot` file\n\n## Output Requirements\n- Output only valid Graphviz\u002FDOT code without triple backticks\n- Do not explain the code in natural language\n- Follow all visual and semantic conventions above exactly\n\n# Render the Graph\n- After the graph description is generated, generate an image with:\n  ```bash\n  > dot -Tpng causal_graph.dot -o causal_graph.png\n  > open causal_graph.png\n  ```\n\n# Read the PNG File\n- If an image was specified, read the PNG file\n- If the generated PNG image is very different from the input image:\n  - Find the differences in terms of layout\n  - Apply changes to `causal_graph.dot` to approximate the input image\n\n# Verification\n- [ ] Confirm `causal_graph.dot` is valid Graphviz DOT syntax\n- [ ] Confirm every node type uses the required color and shape rules\n- [ ] Confirm the rendered `causal_graph.png` matches the input image or\n      description in layout and semantics\n","You are an expert in causal inference and graphical models\n\nI will give you a description or an image and your task is to produce a\nGraphviz\u002FDOT representation of that graph that follows the rules below exactly\n\nThe resulting graph should allow a knowledgeable reader to\n\n- Distinguish causation from correlation at a glance\n- Identify exogenous vs endogenous variables\n- Identify latent vs observable variables\n- Recognize interventions and counterfactuals\n\nUse color to distinguish variable types consistently\n\n# Generate the DOT File\n\n## General Graph Rules\n- Use Graphviz DOT syntax\n- Use a directed graph (`digraph`)\n- Set `rankdir=LR` for left-to-right causal flow\n- Use both `color` (border) and `fillcolor` + `style=filled` to encode variable\n  type (do not rely on color alone; keep shape conventions too)\n\n## Node Representation Rules\n\n### Variable Type Colors (Required)\nUse these colors consistently for node borders\u002Ffills:\n\n- Exogenous variable: color=#408AB0, fillcolor=#EAF3F8\n- Endogenous variable: color=#62D4A4, fillcolor=#EAF9F3\n- Target variable: color=#F8D476, fillcolor=#FFF6DA\n- Latent (unobservable) variable: color=#183B4A, fillcolor=#E6EEF1\n- Intervened variable (do(X)): color=#DE5470, fillcolor=#FBE6EC\n- Counterfactual variable: color=#183B4A, fillcolor=#E6EEF1\n\n### Exogenous vs Endogenous vs Target\n- Exogenous variable (no causal parents)\n  - `shape=ellipse`\n  - `penwidth=2`\n  - Must be colored using the exogenous palette above\n- Endogenous variable (has at least one causal parent)\n  - `shape=box,rounded`\n  - `penwidth=1` (default)\n  - Must be colored using the endogenous palette above\n- Target variable (no descendants; under study)\n  - `shape=box`\n  - `penwidth=2`\n  - Must be colored using the target palette above\n\n### Observable vs Unobservable (Latent) Variables\n- Observable variable\n  - `style=filled,solid`\n  - Use the appropriate color palette for its type\n    (exogenous\u002Fendogenous\u002Ftarget\u002Fetc.)\n  - `fontcolor=black`\n- Unobservable \u002F latent variable\n  - `style=\"filled,dashed\"`\n  - Must use the latent palette above (`color=gray40`, `fillcolor=gray90`,\n    `fontcolor=gray40`)\n  - Keep the same shape rule based on exogenous\u002Fendogenous\u002Ftarget if known;\n    otherwise default to `shape=ellipse`\n\n### Special Node Types\n- Intervened variable (`do(X)`)\n  - `shape=doublecircle`\n  - Label must be `do(X)`\n  - `style=filled,solid`\n  - Must use the intervened palette above\n  - Incoming causal edges to `X` must be omitted\n- Counterfactual variable\n  - `style=\"filled,dotted\"`\n  - Must use the counterfactual palette above\n  - Label must include counterfactual context (e.g., `Y | do(X=1)`)\n\n## Edge Representation Rules\n\n### Causation\n- Direct causal effect\n  - Solid arrow (`->`)\n  - `style=solid`\n  - `dir=forward`\n  - Default `color=black` unless overridden by effect sign\u002Fstrength\n- Uncertain or hypothesized causation\n  - Dotted arrow (`style=dotted`)\n  - Must include `label=\"?\"`\n  - Use `color=gray30`\n\n### Correlation \u002F Association (Non-causal)\n- Correlation without causal claim\n  - Dashed edge\n  - No arrowheads (`dir=none`)\n  - Use `constraint=false`\n  - Label with a statistical symbol\n  - Use `color=gray50`\n\n### Effect Attributes (Optional)\n- Positive effect\n  - Default arrowhead\n  - Label `\"+\"`, `\"++\"`, `\"+++\"`\n  - Use `color=darkgreen`\n- Negative effect\n  - Default arrowhead\n  - Label `\"-\"`, `\"--\"`, `\"---\"`\n  - Use `color=firebrick3`\n- Effect strength (by symbols in the label)\n  - Strong: `+++`, `---`\n  - Weak: `+`, `-`\n\n## Confounding and Common Causes\n- Represent confounders explicitly\n  - Use a latent node with dashed gray styling (latent palette)\n  - Draw causal arrows from the confounder to each affected variable\n- Do not use correlation edges to represent confounding\n\n## Layout and Structure\n- Use subgraphs (clusters) when helpful\n  - Structural model vs observational associations\n  - Different time slices or mechanisms\n- Ensure correlation edges do not affect node ranking (`constraint=false`)\n\n# Save the File\n- Save the output in a `causal_graph.dot` file\n\n## Output Requirements\n- Output only valid Graphviz\u002FDOT code without triple backticks\n- Do not explain the code in natural language\n- Follow all visual and semantic conventions above exactly\n\n# Render the Graph\n- After the graph description is generated, generate an image with:\n  ```bash\n  > dot -Tpng causal_graph.dot -o causal_graph.png\n  > open causal_graph.png\n  ```\n\n# Read the PNG File\n- If an image was specified, read the PNG file\n- If the generated PNG image is very different from the input image:\n  - Find the differences in terms of layout\n  - Apply changes to `causal_graph.dot` to approximate the input image\n\n# Verification\n- [ ] Confirm `causal_graph.dot` is valid Graphviz DOT syntax\n- [ ] Confirm every node type uses the required color and shape rules\n- [ ] Confirm the rendered `causal_graph.png` matches the input image or\n      description in layout and semantics\n",{"model":34,"description":7},"opus","master","804ae3e928c04740cec553be0eb28c8d06ff420e",".claude\u002Fskills\u002Fgraphviz.causal_kg_style",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":44,"prompt":54,"zipAvailable":55},[45,48,51],{"tool":46,"command":47},"npx","npx skills add causify-ai\u002Fhelpers --skill graphviz.causal_kg_style",{"tool":49,"command":50},"bunx","bunx skills add causify-ai\u002Fhelpers --skill graphviz.causal_kg_style",{"tool":52,"command":53},"pnpm","pnpm dlx skills add causify-ai\u002Fhelpers --skill graphviz.causal_kg_style","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcausify-ai\u002Fhelpers\u002Fblob\u002Fmaster\u002F.claude\u002Fskills\u002Fgraphviz.causal_kg_style\u002FSKILL.md",true,[],[58,80,98,109,118,132],{"skillNo":59,"name":60,"nameZh":6,"description":61,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":62,"categories":63,"keywords":69,"publishedAt":29},"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",[64],{"categoryNo":65,"categoryName":66,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[70,71,72,73,74,75,76,77,78,79],"docker","tutorial","tutorial in 60 mins propagate docker changes","propagate","template","sync","haiku","files","project","match",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":89,"publishedAt":29},"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",[86],{"categoryNo":87,"categoryName":88,"taxonomyType":67,"taxonomyTypeDesc":68},"01JBSEEDCAT000000000000002","文档处理",[90,91,71,92,93,94,76,95,96,97],"markdown","merge","tutorial in 60 mins merge markdown","notebook","jupyter","file","jupyter notebook","content",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":29},"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",[],[105,71,106,107,108,76,28],"tutorial in 60 mins format","format","directory","learn",{"skillNo":110,"name":111,"nameZh":6,"description":112,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":115,"publishedAt":29},"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",[],[116,71,117,108,107,28],"tutorial in 60 mins create","create",{"skillNo":119,"name":120,"nameZh":6,"description":121,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":122,"categories":123,"keywords":124,"publishedAt":29},"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",[],[125,126,127,128,129,130,131],"progress","todo","todo reorg in progress","tasks","queue","task","stage",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":29},"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",[],[139,126,129,130,131],"todo reorg headers"]