{"id":"bdb0ead6-ab78-4905-8b5d-1df4cdf79837","shortId":"av463A","kind":"skill","title":"draw-io","tagline":"draw.io diagram creation, editing, and review. Use for .drawio XML editing, PNG conversion, layout adjustment, and AWS icon usage.","description":"# draw.io Diagram Skill\n\n## 1. Basic Rules\n\n- Edit only `.drawio` files\n- Do not directly edit `.drawio.png` files\n- Use auto-generated `.drawio.png` by pre-commit hook in slides\n\n## 2. Font Settings\n\nFor diagrams used in Quarto slides,\nspecify `defaultFontFamily` in mxGraphModel tag:\n\n```xml\n<mxGraphModel defaultFontFamily=\"Noto Sans JP\" ...>\n```\n\nAlso explicitly specify `fontFamily` in each text element's style attribute:\n\n```xml\nstyle=\"text;html=1;fontSize=27;fontFamily=Noto Sans JP;\"\n```\n\n## 3. Conversion Commands\n\nSee conversion script at [scripts/convert-drawio-to-png.sh](scripts/convert-drawio-to-png.sh).\n\n```sh\n# Convert all .drawio files\nmise exec -- pre-commit run --all-files\n\n# Convert specific .drawio file\nmise exec -- pre-commit run convert-drawio-to-png --files assets/my-diagram.drawio\n\n# Run script directly (using skill's script)\nbash ~/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh assets/diagram1.drawio\n```\n\nInternal command used:\n\n```sh\ndrawio -x -f png -s 2 -t -o output.drawio.png input.drawio\n```\n\n| Option | Description |\n|--------|-------------|\n| `-x` | Export mode |\n| `-f png` | PNG format output |\n| `-s 2` | 2x scale (high resolution) |\n| `-t` | Transparent background |\n| `-o` | Output file path |\n\n## 4. Layout Adjustment\n\n### 4.1. Coordinate Adjustment Steps\n\n1. Open `.drawio` file in text editor (plain XML format)\n2. Find `mxCell` for element to adjust (search by `value` attribute for text)\n3. Adjust coordinates in `mxGeometry` tag\n   - `x`: Position from left\n   - `y`: Position from top\n   - `width`: Width\n   - `height`: Height\n4. Run conversion and verify\n\n### 4.2. Coordinate Calculation\n\n- Element center coordinate = `y + (height / 2)`\n- To align multiple elements, calculate and match center coordinates\n\n## 5. Design Principles\n\n### 5.1. Basic Principles\n\n- Clarity: Create simple, visually clean diagrams\n- Consistency: Unify colors, fonts, icon sizes, line thickness\n- Accuracy: Do not sacrifice accuracy for simplification\n\n### 5.2. Element Rules\n\n- Label all elements\n- Use arrows to indicate direction\n  (prefer 2 unidirectional arrows over bidirectional)\n- Use latest official icons\n- Add legend to explain custom symbols\n\n### 5.3. Accessibility\n\n- Ensure sufficient color contrast\n- Use patterns in addition to colors\n\n### 5.4. Progressive Disclosure\n\nSeparate complex systems into staged diagrams:\n\n| Diagram Type | Purpose |\n|--------------|---------|\n| Context Diagram | System overview from external perspective |\n| System Diagram | Main components and relationships |\n| Component Diagram | Technical details and integration points |\n| Deployment Diagram | Infrastructure configuration |\n| Data Flow Diagram | Data flow and transformation |\n| Sequence Diagram | Time-series interactions |\n\n### 5.5. Metadata\n\nInclude title, description, last updated, author, and version in diagrams.\n\n## 6. Best Practices\n\n### 6.1. Background Color\n\n- Remove `background=\"#ffffff\"`\n- Transparent background adapts to various themes\n\n### 6.2. Font Size\n\n- Use 1.5x standard font size (around 18px) for PDF readability\n\n### 6.3. Japanese Text Width\n\n- Allow 30-40px per character\n- Insufficient width causes unintended line breaks\n\n```xml\n<!-- For 10-character text, allow 300-400px -->\n<mxGeometry x=\"140\" y=\"60\" width=\"400\" height=\"40\" />\n```\n\n### 6.4. Arrow Placement\n\n- Always place arrows at back (position in XML right after Title)\n- Position arrows to avoid overlapping with labels\n- Keep arrow start/end at least 20px from label bottom edge\n\n```xml\n<!-- Title -->\n<mxCell id=\"title\" value=\"...\" .../>\n\n<!-- Arrows (back layer) -->\n<mxCell id=\"arrow1\" style=\"edgeStyle=...\" .../>\n\n<!-- Other elements (front layer) -->\n<mxCell id=\"box1\" .../>\n```\n\n### 6.5. Arrow Connection to Text Labels\n\nFor text elements, exitX/exitY don't work, so use explicit coordinates:\n\n```xml\n<!-- Good: Explicit coordinates with sourcePoint/targetPoint -->\n<mxCell id=\"arrow\" style=\"...\" edge=\"1\" parent=\"1\">\n  <mxGeometry relative=\"1\" as=\"geometry\">\n    <mxPoint x=\"1279\" y=\"500\" as=\"sourcePoint\"/>\n    <mxPoint x=\"119\" y=\"500\" as=\"targetPoint\"/>\n    <Array as=\"points\">\n      <mxPoint x=\"1279\" y=\"560\"/>\n      <mxPoint x=\"119\" y=\"560\"/>\n    </Array>\n  </mxGeometry>\n</mxCell>\n```\n\n### 6.6. edgeLabel Offset Adjustment\n\nAdjust offset attribute to distance arrow labels from arrows:\n\n```xml\n<!-- Place above arrow (negative value to distance) -->\n<mxPoint x=\"0\" y=\"-40\" as=\"offset\"/>\n\n<!-- Place below arrow (positive value to distance) -->\n<mxPoint x=\"0\" y=\"40\" as=\"offset\"/>\n```\n\n### 6.7. Remove Unnecessary Elements\n\n- Remove decorative icons irrelevant to context\n- Example: If ECR exists, separate Docker icon is unnecessary\n\n### 6.8. Labels and Headings\n\n- Service name only: 1 line\n- Service name + supplementary info: 2 lines with line break\n- Redundant notation (e.g., ECR Container Registry): shorten to 1 line\n- Use `&lt;br&gt;` tag for line breaks\n\n### 6.9. Background Frame and Internal Element Placement\n\nWhen placing elements inside background frames (grouping boxes),\nensure sufficient margin.\n\n- YOU MUST: Internal elements must have at least 30px margin from frame boundary\n- YOU MUST: Account for rounded corners (`rounded=1`) and stroke width\n- YOU MUST: Always visually verify PNG output for overflow\n\nCoordinate calculation verification:\n\n```text\nBackground frame: y=20, height=400 -> range is y=20-420\nInternal element top: frame y + 30 or more (e.g., y=50)\nInternal element bottom: frame y + height - 30 or less (e.g., up to y=390)\n```\n\nBad example (may overflow):\n\n```xml\n<!-- Background frame -->\n<mxCell id=\"bg\" style=\"rounded=1;strokeWidth=3;...\">\n  <mxGeometry x=\"500\" y=\"20\" width=\"560\" height=\"400\" />\n</mxCell>\n<!-- Text: y=30 is too close to frame top (y=20) -->\n<mxCell id=\"label\" value=\"Title\" style=\"text;...\">\n  <mxGeometry x=\"510\" y=\"30\" width=\"540\" height=\"35\" />\n</mxCell>\n```\n\nGood example (sufficient margin):\n\n```xml\n<!-- Background frame -->\n<mxCell id=\"bg\" style=\"rounded=1;strokeWidth=3;...\">\n  <mxGeometry x=\"500\" y=\"20\" width=\"560\" height=\"430\" />\n</mxCell>\n<!-- Text: y=50 is 30px from frame top (y=20) -->\n<mxCell id=\"label\" value=\"Title\" style=\"text;...\">\n  <mxGeometry x=\"510\" y=\"50\" width=\"540\" height=\"35\" />\n</mxCell>\n```\n\n## 7. Reference\n\n- [Layout Guidelines](references/layout-guidelines.md)\n- [AWS Icons](references/aws-icons.md)\n- [AWS Icon Search Script](scripts/find_aws_icon.py)\n\nAWS icon search examples:\n\n```sh\npython ~/.claude/skills/draw-io/scripts/find_aws_icon.py ec2\npython ~/.claude/skills/draw-io/scripts/find_aws_icon.py lambda\n```\n\n## 8. Checklist\n\n- [ ] No background color set (page=\"0\")\n- [ ] Font size appropriate (larger recommended)\n- [ ] Arrows placed at back layer\n- [ ] Arrows not overlapping labels (verify in PNG)\n- [ ] Arrow start/end sufficiently distant from labels (at least 20px)\n- [ ] Arrows not penetrating boxes or icons (verify in PNG)\n- [ ] Internal elements not overflowing background frame (verify in PNG)\n- [ ] 30px+ margin between background frame and internal elements\n- [ ] AWS service names are official names/correct abbreviations\n- [ ] AWS icons are latest version (mxgraph.aws4.*)\n- [ ] No unnecessary elements remaining\n- [ ] Visually verified PNG conversion\n\n## 9. Image Display in reveal.js Slides\n\nAdd `auto-stretch: false` to YAML header:\n\n```yaml\n---\ntitle: \"Your Presentation\"\nformat:\n  revealjs:\n    auto-stretch: false\n---\n```\n\nThis ensures correct image display on mobile devices.","tags":["draw","agent","toolkit","softaworks","agent-skills","automation","claude","claude-code","coding-agent","development"],"capabilities":["skill","source-softaworks","skill-draw-io","topic-agent-skills","topic-automation","topic-claude","topic-claude-code","topic-coding-agent","topic-development"],"categories":["agent-toolkit"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/softaworks/agent-toolkit/draw-io","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add softaworks/agent-toolkit","source_repo":"https://github.com/softaworks/agent-toolkit","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 1689 github stars · SKILL.md body (7,441 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-03T00:52:49.170Z","embedding":null,"createdAt":"2026-04-18T21:54:29.792Z","updatedAt":"2026-05-03T00:52:49.170Z","lastSeenAt":"2026-05-03T00:52:49.170Z","tsv":"'-40':408 '-420':601 '/.claude/skills/draw-io/scripts/convert-drawio-to-png.sh':136 '/.claude/skills/draw-io/scripts/find_aws_icon.py':656,659 '0':668 '1':26,81,182,509,528,574 '1.5':392 '18px':398 '2':51,147,163,192,236,285,515 '20':594,600 '20px':445,694 '27':83 '2x':164 '3':88,205 '30':407,607,619 '30px':562,713 '390':626 '4':175,223 '4.1':178 '4.2':228 '400':596 '5':246 '5.1':249 '5.2':273 '5.3':300 '5.4':312 '5.5':361 '50':612 '6':373 '6.1':376 '6.2':388 '6.3':402 '6.4':419 '6.5':451 '6.6':469 '6.7':483 '6.8':502 '6.9':536 '7':637 '8':661 '9':742 'abbrevi':727 'access':301 'account':569 'accuraci':266,270 'adapt':384 'add':294,748 'addit':309 'adjust':18,177,180,198,206,472,473 'align':238 'all-fil':108 'allow':406 'also':66 'alway':422,580 'appropri':671 'around':397 'arrow':280,287,420,424,434,441,452,478,481,674,679,686,695 'assets/diagram1.drawio':137 'assets/my-diagram.drawio':127 'attribut':76,202,475 'author':368 'auto':41,750,763 'auto-gener':40 'auto-stretch':749,762 'avoid':436 'aw':20,642,645,650,721,728 'back':426,677 'background':170,377,380,383,537,547,591,664,708,716 'bad':627 'bash':135 'basic':27,250 'best':374 'bidirect':289 'bottom':448,615 'boundari':566 'box':550,698 'br':531 'break':417,519,535 'calcul':230,241,588 'caus':414 'center':232,244 'charact':411 'checklist':662 'clariti':252 'clean':256 'color':260,304,311,378,665 'command':90,139 'commit':47,106,119 'complex':316 'compon':334,337 'configur':347 'connect':453 'consist':258 'contain':524 'context':324,492 'contrast':305 'convers':16,89,92,225,741 'convert':98,111,122 'convert-drawio-to-png':121 'coordin':179,207,229,233,245,467,587 'corner':572 'correct':768 'creat':253 'creation':6 'custom':298 'data':348,351 'decor':488 'defaultfontfamili':61 'deploy':344 'descript':153,365 'design':247 'detail':340 'devic':773 'diagram':5,24,55,257,320,321,325,332,338,345,350,356,372 'direct':35,130,283 'disclosur':314 'display':744,770 'distanc':477 'distant':689 'docker':498 'draw':2 'draw-io':1 'draw.io':4,23 'drawio':12,31,100,113,123,142,184 'drawio.png':37,43 'e.g':522,610,622 'ec2':657 'ecr':495,523 'edg':449 'edgelabel':470 'edit':7,14,29,36 'editor':188 'element':73,196,231,240,274,278,459,486,541,545,557,603,614,705,720,736 'ensur':302,551,767 'exampl':493,628,633,653 'exec':103,116 'exist':496 'exitx/exity':460 'explain':297 'explicit':67,466 'export':155 'extern':329 'f':144,157 'fals':752,765 'ffffff':381 'file':32,38,101,110,114,126,173,185 'find':193 'flow':349,352 'font':52,261,389,395,669 'fontfamili':69,84 'fontsiz':82 'format':160,191,760 'frame':538,548,565,592,605,616,709,717 'generat':42 'good':632 'group':549 'guidelin':640 'head':505 'header':755 'height':221,222,235,595,618 'high':166 'hook':48 'html':80 'icon':21,262,293,489,499,643,646,651,700,729 'imag':743,769 'includ':363 'indic':282 'info':514 'infrastructur':346 'input.drawio':151 'insid':546 'insuffici':412 'integr':342 'interact':360 'intern':138,540,556,602,613,704,719 'io':3 'irrelev':490 'japanes':403 'jp':87 'keep':440 'label':276,439,447,456,479,503,682,691 'lambda':660 'larger':672 'last':366 'latest':291,731 'layer':678 'layout':17,176,639 'least':444,561,693 'left':214 'legend':295 'less':621 'line':264,416,510,516,518,529,534 'main':333 'margin':553,563,635,714 'match':243 'may':629 'metadata':362 'mise':102,115 'mobil':772 'mode':156 'multipl':239 'must':555,558,568,579 'mxcell':194 'mxgeometri':209 'mxgraph.aws4':733 'mxgraphmodel':63 'name':507,512,723 'names/correct':726 'notat':521 'noto':85 'o':149,171 'offici':292,725 'offset':471,474 'open':183 'option':152 'output':161,172,584 'output.drawio.png':150 'overflow':586,630,707 'overlap':437,681 'overview':327 'page':667 'path':174 'pattern':307 'pdf':400 'penetr':697 'per':410 'perspect':330 'place':423,544,675 'placement':421,542 'plain':189 'png':15,125,145,158,159,583,685,703,712,740 'point':343 'posit':212,216,427,433 'practic':375 'pre':46,105,118 'pre-commit':45,104,117 'prefer':284 'present':759 'principl':248,251 'progress':313 'purpos':323 'px':409 'python':655,658 'quarto':58 'rang':597 'readabl':401 'recommend':673 'redund':520 'refer':638 'references/aws-icons.md':644 'references/layout-guidelines.md':641 'registri':525 'relationship':336 'remain':737 'remov':379,484,487 'resolut':167 'reveal.js':746 'revealj':761 'review':9 'right':430 'round':571,573 'rule':28,275 'run':107,120,128,224 'sacrific':269 'san':86 'scale':165 'script':93,129,134,648 'scripts/convert-drawio-to-png.sh':95,96 'scripts/find_aws_icon.py':649 'search':199,647,652 'see':91 'separ':315,497 'sequenc':355 'seri':359 'servic':506,511,722 'set':53,666 'sh':97,141,654 'shorten':526 'simpl':254 'simplif':272 'size':263,390,396,670 'skill':25,132 'skill-draw-io' 'slide':50,59,747 'source-softaworks' 'specif':112 'specifi':60,68 'stage':319 'standard':394 'start/end':442,687 'step':181 'stretch':751,764 'stroke':576 'style':75,78 'suffici':303,552,634,688 'supplementari':513 'symbol':299 'system':317,326,331 'tag':64,210,532 'technic':339 'text':72,79,187,204,404,455,458,590 'theme':387 'thick':265 'time':358 'time-seri':357 'titl':364,432,757 'top':218,604 'topic-agent-skills' 'topic-automation' 'topic-claude' 'topic-claude-code' 'topic-coding-agent' 'topic-development' 'transform':354 'transpar':169,382 'type':322 'unidirect':286 'unifi':259 'unintend':415 'unnecessari':485,501,735 'updat':367 'usag':22 'use':10,39,56,131,140,279,290,306,391,465,530 'valu':201 'various':386 'verif':589 'verifi':227,582,683,701,710,739 'version':370,732 'visual':255,581,738 'width':219,220,405,413,577 'work':463 'x':143,154,211,393 'xml':13,65,77,190,418,429,450,468,482,631,636 'y':215,234,593,599,606,611,617,625 'yaml':754,756","prices":[{"id":"cd2a1670-b605-4e5b-911b-7ddb59fd1fcd","listingId":"bdb0ead6-ab78-4905-8b5d-1df4cdf79837","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"softaworks","category":"agent-toolkit","install_from":"skills.sh"},"createdAt":"2026-04-18T21:54:29.792Z"}],"sources":[{"listingId":"bdb0ead6-ab78-4905-8b5d-1df4cdf79837","source":"github","sourceId":"softaworks/agent-toolkit/draw-io","sourceUrl":"https://github.com/softaworks/agent-toolkit/tree/main/skills/draw-io","isPrimary":false,"firstSeenAt":"2026-04-18T21:54:29.792Z","lastSeenAt":"2026-05-03T00:52:49.170Z"}],"details":{"listingId":"bdb0ead6-ab78-4905-8b5d-1df4cdf79837","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"softaworks","slug":"draw-io","github":{"repo":"softaworks/agent-toolkit","stars":1689,"topics":["agent-skills","ai","automation","claude","claude-code","coding-agent","development"],"license":"mit","html_url":"https://github.com/softaworks/agent-toolkit","pushed_at":"2026-03-05T16:46:24Z","description":"A curated collection of skills for AI coding agents. Skills are packaged instructions and scripts that extend agent capabilities across development, documentation, planning, and professional workflows.","skill_md_sha":"7df85f3870280ec7a138294d57d517aa6aec57a2","skill_md_path":"skills/draw-io/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/softaworks/agent-toolkit/tree/main/skills/draw-io"},"layout":"multi","source":"github","category":"agent-toolkit","frontmatter":{"name":"draw-io","description":"draw.io diagram creation, editing, and review. Use for .drawio XML editing, PNG conversion, layout adjustment, and AWS icon usage."},"skills_sh_url":"https://skills.sh/softaworks/agent-toolkit/draw-io"},"updatedAt":"2026-05-03T00:52:49.170Z"}}