{"id":"7f68db32-6002-407f-b690-2c99b1169563","entityType":"agent","slug":"clawhub-guoxh-plantuml","name":"PlantUML","canonicalUrl":"https://www.xpersona.co/agent/clawhub-guoxh-plantuml","canonicalPath":"/agent/clawhub-guoxh-plantuml","generatedAt":"2026-10-14T17:04:36.341Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":null},"description":"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Skill: PlantUML Owner: guoxh Summary: Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Tags: latest:1.1.1 Version history: v1.1.1 | 2026-06-13T14:42:47.400Z | user Add explicit security/trust notes for local Java/Graphviz rendering and URL-based PlantUML includes; clarify no credentials or account access are required. v1.1.0 | 2026-06-13T08:53:08.505Z | user Upgrade PlantUML","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 981 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s17dsvj6tbs3jy3xgjps2tqzn183jx3e:plantuml","sourceUrl":"https://clawhub.ai/guoxh/plantuml","homepage":"https://clawhub.ai/guoxh/skills/plantuml","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/guoxh/plantuml","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/guoxh/skills/plantuml","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Skill: PlantUML Owner: guoxh Summary: Generate UML, C4, architecture"},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":null},"stars":null,"forks":null,"downloads":981,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.1.1","tractionLabel":"981 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:53:25.065Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T22:53:25.079Z","lastCrawledAt":"2026-10-11T22:53:25.065Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T22:53:25.065Z","lastVerifiedAt":null,"highlights":[{"version":"1.1.1","createdAt":"2026-06-13T14:42:47.400Z","changelog":"Add explicit security/trust notes for local Java/Graphviz rendering and URL-based PlantUML includes; clarify no credentials or account access are required.","fileCount":6,"zipByteSize":11742},{"version":"1.1.0","createdAt":"2026-06-13T08:53:08.505Z","changelog":"Upgrade PlantUML workflow docs: add themes, MEDIA delivery guidance, smoke tests, expanded syntax references, stdlib guide, shared style include, and renderable examples.","fileCount":6,"zipByteSize":11297},{"version":"1.0.1","createdAt":"2026-05-12T08:14:31.799Z","changelog":"Fix absolute path to use portable tilde path","fileCount":5,"zipByteSize":6788},{"version":"1.0.0","createdAt":"2026-05-11T13:30:04.489Z","changelog":"Initial release: supports use case, class, sequence, activity, state, component, deployment, object, timing, and ER diagrams. Includes syntax guide and troubleshooting table.","fileCount":4,"zipByteSize":5759}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s17dsvj6tbs3jy3xgjps2tqzn183jx3e:plantuml","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-14T17:04:36.341Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-guoxh-plantuml/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":null},"readme":"Skill: PlantUML\n\nOwner: guoxh\n\nSummary: Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\n\nTags: latest:1.1.1\n\nVersion history:\n\nv1.1.1 | 2026-06-13T14:42:47.400Z | user\n\nAdd explicit security/trust notes for local Java/Graphviz rendering and URL-based PlantUML includes; clarify no credentials or account access are required.\n\nv1.1.0 | 2026-06-13T08:53:08.505Z | user\n\nUpgrade PlantUML workflow docs: add themes, MEDIA delivery guidance, smoke tests, expanded syntax references, stdlib guide, shared style include, and renderable examples.\n\nv1.0.1 | 2026-05-12T08:14:31.799Z | user\n\nFix absolute path to use portable tilde path\n\nv1.0.0 | 2026-05-11T13:30:04.489Z | user\n\nInitial release: supports use case, class, sequence, activity, state, component, deployment, object, timing, and ER diagrams. Includes syntax guide and troubleshooting table.\n\nArchive index:\n\nArchive v1.1.1: 6 files, 11742 bytes\n\nFiles: references/stdlib-guide.md (6331b), references/syntax-guide.md (6322b), scripts/render.py (3000b), skill-card.md (2267b), SKILL.md (7447b), _meta.json (127b)\n\nFile v1.1.1:SKILL.md\n\n---\nname: plantuml\ndescription: \"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\"\n---\n\n# PlantUML Diagram Generation\n\n## One-Liner\n\n```bash\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\n## Prerequisites\n\n- **PlantUML jar:** `~/tools/plantuml.jar`\n- **Graphviz:** Required for most diagram types. Verify with `dot -V`.\n- **Java:** Required runtime. Verify with `java -version`.\n\nIf Graphviz is missing, sequence diagrams still render (they use the built-in lambda renderer), but other diagram types will fail.\n\n## Security & Trust Notes\n\nThis skill is a local diagram-generation helper. It does not require credentials, account access, production data access, or background automation. It only documents how to write PlantUML source and render it with local Java/Graphviz tooling.\n\nRendering PlantUML executes the local PlantUML Java jar and, for most non-sequence diagrams, local Graphviz. Treat `.puml` files as source code: review diagrams before rendering when they come from untrusted input, and render inside a controlled workspace.\n\nMost examples use PlantUML's local stdlib. A few optional icon examples in `references/stdlib-guide.md` show external `!include` URLs for AWS/Azure/devicons; those may fetch resources from GitHub at render time. For sensitive/offline environments, mirror icon libraries locally or avoid URL-based includes.\n\n## Quick Start\n\n1. Write `.puml` source file (kebab-case filename).\n2. Generate image:\n   ```bash\n   java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml\n   ```\n3. PlantUML uses the word after `@startuml` as the output filename (e.g., `@startuml MyDiagram` → `MyDiagram.png`).\n4. Attach the resulting PNG/SVG in your reply with a `MEDIA:<absolute-path>` directive line — OpenClaw delivers it.\n\n## Diagram Types & Syntax\n\n- Detailed per-type syntax: [references/syntax-guide.md](references/syntax-guide.md)\n- Architecture stdlib (C4, Archimate, AWS, Azure): [references/stdlib-guide.md](references/stdlib-guide.md)\n- Shared style include: [references/default-style.iuml](references/default-style.iuml)\n- Ready-to-render examples: [examples/](examples/)\n\n### Use Case Diagram\n\n```plantuml\n@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml\n```\n\n### Class Diagram\n\n```plantuml\n@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml\n```\n\n### Sequence Diagram\n\n```plantuml\n@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml\n```\n\n### Activity Diagram\n\n```plantuml\n@startuml DiagramName\nstart\n:Step 1;\nif (Condition?) then (yes)\n  :Step 2a;\nelse (no)\n  :Step 2b;\nendif\nstop\n@enduml\n```\n\n### State Diagram\n\n```plantuml\n@startuml DiagramName\n[*] --> Idle\nIdle --> Processing : start\nProcessing --> Done : complete\nProcessing --> Error : fail\nDone --> [*]\nError --> [*]\n@enduml\n```\n\n### Component Diagram\n\n```plantuml\n@startuml DiagramName\ncomponent [Web App] as WA\ncomponent [API Server] as API\ninterface \"REST API\" as REST\n\nWA -right- REST\nREST -right- API\n@enduml\n```\n\n### Deployment Diagram\n\n```plantuml\n@startuml DiagramName\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n@enduml\n```\n\n### C4 Architecture (System Context)\n\n```plantuml\n@startuml C4Context\n!include <C4/C4_Context>\n\nPerson(user, \"End User\", \"Uses the system through web/mobile.\")\nSystem(sys, \"Order System\", \"Handles ordering, billing, and fulfilment.\")\nSystem_Ext(payment, \"Payment Gateway\", \"Third-party PCI processor.\")\n\nRel(user, sys, \"Places orders\")\nRel(sys, payment, \"Processes payments\", \"HTTPS/JSON\")\n@enduml\n```\n\nFor Container, Component, Dynamic, and Deployment views, see [references/stdlib-guide.md](references/stdlib-guide.md).\n\n## Themes & Shared Style\n\nPlantUML supports built-in themes (set near the top, after `@startuml`):\n\n```plantuml\n!theme cerulean-outline   ' clean blue/white\n!theme materia            ' material design\n!theme plain              ' minimal black/white\n!theme spacelab           ' light, professional\n```\n\nFor consistent styling across diagrams, prefer the shared include:\n\n```plantuml\n@startuml MyDiagram\n!include /home/guoxh/.openclaw/skills/plantuml/references/default-style.iuml\n...\n@enduml\n```\n\nThe include sets sensible defaults: dpi 150, no shadows, professional fonts, consistent colors. Override per-diagram as needed.\n\n## Key Conventions\n\n- **File naming:** Use kebab-case for `.puml` filenames (e.g., `order-system-class.puml`).\n- **Diagram label:** Always name `@startuml <PascalCaseName>` — this becomes the output filename.\n- **Charset:** Always pass `-charset UTF-8` for CJK content.\n- **Format:** Default to `-tpng`. Use `-tsvg` for vector output (zoomable, smaller for line art).\n- **Batch:** Pass multiple `.puml` files in one command for efficiency.\n- **Output directory:** Default is same directory as source. Use `-o <dir>` to specify a different output directory.\n- **Style consistency:** `!include` the shared `default-style.iuml` for professional output.\n\n## Rendering & Delivery Workflow\n\n1. Write the `.puml` file to the workspace.\n2. Render:\n   ```bash\n   java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml\n   ```\n   Or use the wrapper:\n   ```bash\n   python3 ~/.openclaw/skills/plantuml/scripts/render.py <file>.puml\n   ```\n3. Verify the output file exists and is non-zero size:\n   ```bash\n   ls -la <DiagramName>.png\n   ```\n4. Attach in your reply by adding a line like:\n   ```\n   MEDIA:/absolute/path/to/DiagramName.png\n   ```\n   The directive must start the line as plain text (no markdown wrappers, not inside code fences). OpenClaw delivers the file via the active channel.\n\n## Smoke Test\n\nVerify the toolchain end-to-end after install or update:\n\n```bash\ncd ~/.openclaw/skills/plantuml/examples\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 sequence-sample.puml\nls -la SequenceSample.png   # should exist, non-zero\n```\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| `Cannot run program \"dot\"` | Graphviz not installed. Sequence diagrams still work; others need `apt install graphviz`. |\n| Empty output file (0 bytes) | Likely a syntax error. Run with `-v` flag to see detailed error output. |\n| Smetana `UnsupportedOperationException` | Avoid `-Playout=smetana`; use Graphviz instead. |\n| CJK garbled text | Ensure `-charset UTF-8` flag is set and source file is UTF-8. |\n| Image too large/small | Add `-DPLANTUML_LIMIT_SIZE=16384` before the jar, or set `skinparam dpi` in source. |\n| C4 stdlib not found | Requires PlantUML ≥ 1.2020.x. Verify with `java -jar ~/tools/plantuml.jar -version`. |\n| `!include` file not found | Use absolute path or path relative to the `.puml` file. |\n\n## Advanced: Output Size Control\n\n```bash\n# Increase max image size (default 4096)\njava -DPLANTUML_LIMIT_SIZE=16384 -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\nWithin the diagram:\n\n```plantuml\nskinparam dpi 150\n```\n\nFile v1.1.1:_meta.json\n\n{\n  \"ownerId\": \"kn7b21fme4bx0xwpm700dj5ehh82zrgq\",\n  \"slug\": \"plantuml\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1781361767400\n}\n\nFile v1.1.1:references/stdlib-guide.md\n\n# PlantUML Standard Library Quick Reference\n\nPlantUML ships with curated stdlib paths usable via `!include <name>`. These produce far better-looking architecture diagrams than raw component shapes.\n\n## C4 Model (Simon Brown)\n\nFour zoom levels: System Context → Container → Component → Code. Use the level that matches your audience.\n\n### System Context\n\n```plantuml\n@startuml C4Context\n!include <C4/C4_Context>\n\ntitle System Context — Order Platform\n\nPerson(customer, \"Customer\", \"Places orders online.\")\nPerson_Ext(courier, \"Courier\", \"Delivers packages.\")\nSystem(orderSys, \"Order System\", \"Handles ordering, billing, fulfilment.\")\nSystem_Ext(payGw, \"Payment Gateway\", \"PCI-compliant third-party processor.\")\nSystem_Ext(emailSys, \"Email Service\", \"Transactional email provider.\")\n\nRel(customer, orderSys, \"Places orders, tracks status\")\nRel(orderSys, payGw, \"Charges card\", \"HTTPS/JSON\")\nRel(orderSys, emailSys, \"Sends receipts\", \"SMTP\")\nRel(orderSys, courier, \"Dispatches shipment\", \"API\")\n@enduml\n```\n\n### Container\n\n```plantuml\n@startuml C4Container\n!include <C4/C4_Container>\n\nPerson(customer, \"Customer\")\nSystem_Boundary(c1, \"Order System\") {\n  Container(web, \"Web App\", \"React + Next.js\", \"Delivers SPA, server-side renders product pages.\")\n  Container(api, \"API Service\", \"Node.js / Express\", \"Business logic, order workflow.\")\n  ContainerDb(db, \"Order DB\", \"PostgreSQL 16\", \"Orders, customers, line items.\")\n  Container(worker, \"Async Worker\", \"Node.js + BullMQ\", \"Email, fulfilment, retries.\")\n  ContainerQueue(queue, \"Job Queue\", \"Redis Streams\", \"Background jobs.\")\n}\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel(customer, web, \"Browses, orders\", \"HTTPS\")\nRel(web, api, \"REST calls\", \"JSON/HTTPS\")\nRel(api, db, \"Reads/writes\", \"SQL\")\nRel(api, queue, \"Enqueues jobs\")\nRel(worker, queue, \"Consumes jobs\")\nRel(api, payGw, \"Charges card\", \"HTTPS/JSON\")\n@enduml\n```\n\n### Component\n\n```plantuml\n@startuml C4Component\n!include <C4/C4_Component>\n\nContainer_Boundary(api, \"API Service\") {\n  Component(orderCtl, \"Order Controller\", \"Express Router\", \"HTTP handlers for /orders.\")\n  Component(orderSvc, \"Order Service\", \"TypeScript class\", \"Order workflow, state transitions.\")\n  Component(payAdapter, \"Payment Adapter\", \"TypeScript class\", \"Wraps Stripe/Adyen SDK.\")\n  Component(repo, \"Order Repository\", \"Prisma\", \"Persistence layer.\")\n}\n\nRel(orderCtl, orderSvc, \"Calls\")\nRel(orderSvc, payAdapter, \"Charge / refund\")\nRel(orderSvc, repo, \"CRUD\")\n@enduml\n```\n\n### Dynamic (sequence-style C4)\n\n```plantuml\n@startuml C4Dynamic\n!include <C4/C4_Dynamic>\n\nPerson(customer, \"Customer\")\nContainer(web, \"Web App\", \"Next.js\")\nContainer(api, \"API\", \"Node.js\")\nContainerDb(db, \"DB\", \"Postgres\")\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel_D(customer, web, \"1. Submit checkout\")\nRel_D(web, api, \"2. POST /orders\")\nRel_D(api, db, \"3. INSERT order\")\nRel_D(api, payGw, \"4. Charge card\")\nRel_U(payGw, api, \"5. Approved\")\nRel_U(api, web, \"6. 201 Created\")\n@enduml\n```\n\n## Archimate (Enterprise Architecture)\n\n```plantuml\n@startuml ArchimateExample\n!include <archimate/Archimate>\n\ntitle Order Capability Map\n\nBusiness_Actor(customer, \"Customer\")\nBusiness_Process(order, \"Order Processing\")\nBusiness_Service(orderSvc, \"Online Ordering\")\nApplication_Component(webApp, \"Web Application\")\nApplication_Component(apiApp, \"Order API\")\nTechnology_Service(db, \"Database Service\")\nTechnology_Node(server, \"App Server\")\n\nRel_Used(customer, orderSvc)\nRel_Realization(orderSvc, order)\nRel_Realization(webApp, orderSvc)\nRel_Used(webApp, apiApp)\nRel_Used(apiApp, db)\nRel_Assignment(server, apiApp)\n@enduml\n```\n\n## AWS Architecture\n\n```plantuml\n@startuml AWSExample\n!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v18.0/dist\n!include AWSPuml/AWSCommon.puml\n!include AWSPuml/Compute/EC2.puml\n!include AWSPuml/Database/RDS.puml\n!include AWSPuml/NetworkingContentDelivery/CloudFront.puml\n!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancing.puml\n\nleft to right direction\n\nCloudFront(cf, \"CDN\", \"CloudFront\")\nElasticLoadBalancing(alb, \"ALB\", \"Application Load Balancer\")\nEC2(web1, \"Web 1\", \"t3.medium\")\nEC2(web2, \"Web 2\", \"t3.medium\")\nRDS(db, \"Order DB\", \"PostgreSQL Multi-AZ\")\n\ncf --> alb\nalb --> web1\nalb --> web2\nweb1 --> db\nweb2 --> db\n@enduml\n```\n\nNote: AWS icons need network access at render time, or pre-cache them locally. See https://github.com/awslabs/aws-icons-for-plantuml.\n\n## Azure Architecture\n\n```plantuml\n@startuml AzureExample\n!define AzurePuml https://raw.githubusercontent.com/plantuml-stdlib/Azure-PlantUML/release/2-9/dist\n!include AzurePuml/AzureCommon.puml\n!include AzurePuml/Compute/AzureAppService.puml\n!include AzurePuml/Databases/AzureSQLDatabase.puml\n\nAzureAppService(web, \"Web App\", \"App Service Plan B2\")\nAzureSQLDatabase(db, \"Order DB\", \"S2 Standard\")\n\nweb --> db : ADO.NET\n@enduml\n```\n\n## Tupadr3 Devicons (technology icons)\n\n```plantuml\n@startuml TechStack\n!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons2\n!include DEVICONS/python.puml\n!include DEVICONS/postgresql.puml\n!include DEVICONS/redis.puml\n!include DEVICONS/nginx.puml\n\nrectangle \"<$python>\\nAPI\" as api\nrectangle \"<$postgresql>\\nDB\" as db\nrectangle \"<$redis>\\nCache\" as cache\nrectangle \"<$nginx>\\nProxy\" as proxy\n\nproxy --> api\napi --> db\napi --> cache\n@enduml\n```\n\n## Choosing the Right Stdlib\n\n| Need | Use |\n|------|-----|\n| Software architecture (4 zoom levels) | C4 |\n| Enterprise / business + IT alignment | Archimate |\n| Cloud-vendor-specific deployment | AWS / Azure / GCP icons |\n| Tech stack illustration with logos | Tupadr3 devicons |\n| Generic boxes/lines | Plain `component` / `node` |\n\n## Rendering Notes\n\n- **Local stdlib** (`<C4/...>`, `<archimate/...>`) ships in the jar — no network needed.\n- **External icon sets** (AWS, Azure, devicons) fetch from GitHub at render time when rendered exactly as URL-based examples. For sensitive or offline rendering, mirror the icon repos locally and include with reviewed absolute/local paths instead.\n- **Untrusted diagrams**: review `.puml` source before rendering. PlantUML supports includes and local rendering helpers; keep untrusted inputs in a controlled workspace.\n- **Themes interact with stdlibs**: C4 has its own visual style; avoid mixing `!theme` with `<C4/...>` unless you've tested the combination.\n\nFile v1.1.1:references/syntax-guide.md\n\n# PlantUML Syntax Quick Reference\n\n## Themes\n\nBuilt-in themes (set near the top of the file, after `@startuml`):\n\n```plantuml\n!theme plain               ' minimal black/white\n!theme cerulean-outline    ' clean blue/white\n!theme materia             ' material design\n!theme spacelab            ' light, professional\n!theme sketchy             ' hand-drawn look\n!theme cyborg              ' dark mode\n```\n\nFull list: https://the-lum.github.io/puml-themes-gallery/\n\n## Common Skinparam\n\n```plantuml\nskinparam classAttributeIconSize 0   ' hide visibility icons in class diagrams\nskinparam packageStyle rectangle     ' rectangle-style packages\nskinparam actorStyle awesome         ' stick-figure actors\nskinparam defaultFontSize 12\nskinparam dpi 150                    ' resolution control\nskinparam shadowing false            ' disable shadows\nskinparam monochrome true            ' grayscale output\nskinparam backgroundColor #FFFFFF\n```\n\nFor consistency, prefer the shared include:\n\n```plantuml\n!include /home/guoxh/.openclaw/skills/plantuml/references/default-style.iuml\n```\n\n## Use Case Diagram\n\n### Actors & Use Cases\n```plantuml\nactor \"Regular User\" as User\nactor Admin\nusecase \"Login\" as UC1\nusecase \"Manage Users\" as UC2\n```\n\n### Relationships\n```plantuml\nUser --> UC1\nUC2 .> UC1 : <<include>>     ' dashed arrow, FROM base TO included\nUC3 .> UC1 : <<extend>>      ' dashed arrow, FROM extension TO base\nAdmin <|-- User              ' generalization (Admin inherits User)\n```\n\n### System Boundary\n```plantuml\nrectangle \"System Name\" {\n  usecase \"UC1\" as UC1\n  usecase \"UC2\" as UC2\n}\n```\n\n## Class Diagram\n\n### Visibility\n- `+` public, `-` private, `#` protected, `~` package\n\n### Relationships\n```plantuml\nClassA <|-- ClassB              ' generalization (inheritance)\nClassA *-- ClassB               ' composition (filled diamond on A)\nClassA o-- ClassB               ' aggregation (hollow diamond on A)\nClassA --> ClassB               ' association\nClassA ..> ClassB               ' dependency (dashed)\nClassA ..|> InterfaceB          ' realization (dashed, hollow triangle)\n```\n\n### Multiplicity & Labels\n```plantuml\nClassA \"1\" --> \"0..*\" ClassB : label >\n```\n\n### Abstract & Interfaces\n```plantuml\nabstract class Shape { }        ' name in italics\ninterface Drawable { }          ' <<interface>> stereotype\n```\n\n### Notes\n```plantuml\nnote left of ClassA : Some note\nnote right of ClassB\n  Multi-line note\nend note\n```\n\n## Sequence Diagram\n\n### Messages\n```plantuml\nA -> B  : synchronous call\nA ->> B : asynchronous call\nA --> B : return (dashed)\nA -> A  : self-call\n```\n\n### Activation Bars\n```plantuml\nA -> B : msg\nactivate B\nB --> A : reply\ndeactivate B\n```\n\n### Fragments\n```plantuml\nalt condition 1\n  A -> B : msg1\nelse condition 2\n  A -> B : msg2\nend\n\nopt optional condition\n  A -> B : msg3\nend\n\nloop for each item\n  A -> B : msg4\nend\n\npar parallel\n  A -> B : msg5\nelse\n  A -> C : msg6\nend\n```\n\n### Grouping & Notes\n```plantuml\ngroup Description\n  A -> B : msg\nend\n\nnote left of A : note text\nnote over A, B : note spanning lifelines\n```\n\n### Delay & Separators\n```plantuml\n... 5 minutes later ...\n== Section Title ==\n```\n\n## Activity Diagram\n\n### Basic Flow\n```plantuml\nstart\n:Action 1;\n:Action 2;\nstop\n```\n\n### Branching\n```plantuml\nif (condition?) then (yes)\n  :action A;\nelse (no)\n  :action B;\nendif\n```\n\n### Loops\n```plantuml\nrepeat\n  :action;\nrepeat while (more?)\n```\n\n```plantuml\nwhile (condition?) is (yes)\n  :action;\nendwhile (no)\n```\n\n### Parallel & Swimlanes\n```plantuml\n|Swimlane 1|\nstart\n:action A;\n|Swimlane 2|\n:action B;\n|Swimlane 1|\n:action C;\nstop\n```\n\n### Fork/Join\n```plantuml\nstart\nfork\n  :branch 1;\nfork again\n  :branch 2;\nend fork\nstop\n```\n\n## State Diagram\n\n```plantuml\n[*] --> State1\nState1 --> State2 : event1 [guard] / action\nState2 --> State3 : event2\nState3 --> [*]\n\n' Composite state\nstate \"Active\" as Active {\n  [*] --> Running\n  Running --> Paused : pause\n  Paused --> Running : resume\n}\nState1 --> Active : activate\nActive --> [*] : deactivate\n```\n\n## Component Diagram\n\n```plantuml\ncomponent [Component A] as CA\ncomponent [Component B] as CB\ninterface \"API\" as API\n\nCA -right- API\nAPI -right- CB\n```\n\n## Deployment Diagram\n\n```plantuml\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n```\n\n## ER Diagram\n\n```plantuml\nentity \"Customer\" as customer {\n  * customer_id : BIGINT <<PK>>\n  --\n  * name : VARCHAR\n  * email : VARCHAR\n}\nentity \"Order\" as order {\n  * order_id : BIGINT <<PK>>\n  --\n  * customer_id : BIGINT <<FK>>\n  * order_date : DATE\n}\ncustomer ||--o{ order\n```\n\n## Timing Diagram\n\n```plantuml\n@startuml TimingExample\nrobust \"Browser\" as B\nconcise \"Network\" as N\n\n@0\nB is Idle\nN is Down\n\n@+100\nB is Connecting\nN is Up\n\n@+200\nB is Active\n\n@+500\nB is Idle\nN is Down\n@enduml\n```\n\n## Mindmap\n\n```plantuml\n@startmindmap\n* Project\n** Backend\n*** API\n*** DB\n** Frontend\n*** Web\n*** Mobile\n** Ops\n*** CI/CD\n*** Monitoring\n@endmindmap\n```\n\n## WBS (Work Breakdown Structure)\n\n```plantuml\n@startwbs\n* Release 1.0\n** Design\n*** Use cases\n*** Data model\n** Implementation\n*** Backend\n*** Frontend\n** Testing\n*** Unit\n*** Integration\n@endwbs\n```\n\n## Gantt\n\n```plantuml\n@startgantt\nProject starts 2026-06-01\n[Design] lasts 10 days\n[Implementation] lasts 20 days\n[Implementation] starts at [Design]'s end\n[Testing] lasts 7 days\n[Testing] starts at [Implementation]'s end\n@endgantt\n```\n\n## JSON / YAML Visualization\n\n```plantuml\n@startjson\n{\n  \"name\": \"Order\",\n  \"id\": 42,\n  \"items\": [\n    { \"sku\": \"A1\", \"qty\": 2 },\n    { \"sku\": \"B2\", \"qty\": 1 }\n  ]\n}\n@endjson\n```\n\n## Common Pitfalls\n\n1. **Reserved words:** Avoid using `end`, `subgraph`, `graph`, `flowchart` as node/participant IDs.\n2. **Quotes required:** Use double quotes around labels containing `()`, `,`, `:`, or `/`.\n3. **Include vs Extend direction:**\n   - `<<include>>`: arrow FROM base use case TO included use case\n   - `<<extend>>`: arrow FROM extending use case TO base use case\n4. **Composition diamond:** Filled diamond (`*--`) is on the **whole/owner** side, not the part side.\n5. **Sequence alt/else:** Always close with `end`.\n6. **C4 stdlib + custom theme:** Don't combine `!theme` with `<C4/...>` unless tested — C4 brings its own colors.\n7. **`!include` paths:** Use absolute paths or paths relative to the `.puml` file's directory.\n\nFile v1.1.1:skill-card.md\n\n## Description:\n\nGenerate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[guoxh](https://clawhub.ai/user/guoxh)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to author PlantUML source for UML, C4 architecture, ER, timing, mindmap, WBS, and Gantt diagrams and render local diagram outputs with Java and Graphviz tooling.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Rendering untrusted .puml files runs local PlantUML and, for most non-sequence diagrams, Graphviz on diagram source.\n\nMitigation: Review .puml source before rendering and run untrusted diagrams in a controlled workspace.\n\nRisk: URL-based AWS, Azure, or devicon includes can fetch mutable content from GitHub during rendering.\n\nMitigation: Mirror icon libraries locally or avoid URL-based includes in sensitive or offline environments.\n\nRisk: Most non-sequence diagram types fail when Graphviz is missing or unavailable.\n\nMitigation: Verify Java, PlantUML, and Graphviz before use; use sequence diagrams only when Graphviz is not installed.\n\n## Reference(s):\n\n- [PlantUML Syntax Quick Reference](references/syntax-guide.md)\n- [PlantUML Standard Library Quick Reference](references/stdlib-guide.md)\n- [PlantUML Themes Gallery](https://the-lum.github.io/puml-themes-gallery/)\n- [AWS Icons for PlantUML](https://github.com/awslabs/aws-icons-for-plantuml)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown guidance with PlantUML code blocks and shell commands; rendered diagram files may be PNG, SVG, PDF, EPS, TXT, or UTXT.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires local Java and PlantUML tooling; Graphviz is required for most non-sequence diagram types.]\n\n## Skill Version(s):\n\n1.1.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.1.0: 6 files, 11297 bytes\n\nFiles: references/stdlib-guide.md (6080b), references/syntax-guide.md (6322b), scripts/render.py (3000b), skill-card.md (2495b), SKILL.md (6610b), _meta.json (127b)\n\nFile v1.1.0:SKILL.md\n\n---\nname: plantuml\ndescription: \"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\"\n---\n\n# PlantUML Diagram Generation\n\n## One-Liner\n\n```bash\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\n## Prerequisites\n\n- **PlantUML jar:** `~/tools/plantuml.jar`\n- **Graphviz:** Required for most diagram types. Verify with `dot -V`.\n- **Java:** Required runtime. Verify with `java -version`.\n\nIf Graphviz is missing, sequence diagrams still render (they use the built-in lambda renderer), but other diagram types will fail.\n\n## Quick Start\n\n1. Write `.puml` source file (kebab-case filename).\n2. Generate image:\n   ```bash\n   java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml\n   ```\n3. PlantUML uses the word after `@startuml` as the output filename (e.g., `@startuml MyDiagram` → `MyDiagram.png`).\n4. Attach the resulting PNG/SVG in your reply with a `MEDIA:<absolute-path>` directive line — OpenClaw delivers it.\n\n## Diagram Types & Syntax\n\n- Detailed per-type syntax: [references/syntax-guide.md](references/syntax-guide.md)\n- Architecture stdlib (C4, Archimate, AWS, Azure): [references/stdlib-guide.md](references/stdlib-guide.md)\n- Shared style include: [references/default-style.iuml](references/default-style.iuml)\n- Ready-to-render examples: [examples/](examples/)\n\n### Use Case Diagram\n\n```plantuml\n@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml\n```\n\n### Class Diagram\n\n```plantuml\n@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml\n```\n\n### Sequence Diagram\n\n```plantuml\n@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml\n```\n\n### Activity Diagram\n\n```plantuml\n@startuml DiagramName\nstart\n:Step 1;\nif (Condition?) then (yes)\n  :Step 2a;\nelse (no)\n  :Step 2b;\nendif\nstop\n@enduml\n```\n\n### State Diagram\n\n```plantuml\n@startuml DiagramName\n[*] --> Idle\nIdle --> Processing : start\nProcessing --> Done : complete\nProcessing --> Error : fail\nDone --> [*]\nError --> [*]\n@enduml\n```\n\n### Component Diagram\n\n```plantuml\n@startuml DiagramName\ncomponent [Web App] as WA\ncomponent [API Server] as API\ninterface \"REST API\" as REST\n\nWA -right- REST\nREST -right- API\n@enduml\n```\n\n### Deployment Diagram\n\n```plantuml\n@startuml DiagramName\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n@enduml\n```\n\n### C4 Architecture (System Context)\n\n```plantuml\n@startuml C4Context\n!include <C4/C4_Context>\n\nPerson(user, \"End User\", \"Uses the system through web/mobile.\")\nSystem(sys, \"Order System\", \"Handles ordering, billing, and fulfilment.\")\nSystem_Ext(payment, \"Payment Gateway\", \"Third-party PCI processor.\")\n\nRel(user, sys, \"Places orders\")\nRel(sys, payment, \"Processes payments\", \"HTTPS/JSON\")\n@enduml\n```\n\nFor Container, Component, Dynamic, and Deployment views, see [references/stdlib-guide.md](references/stdlib-guide.md).\n\n## Themes & Shared Style\n\nPlantUML supports built-in themes (set near the top, after `@startuml`):\n\n```plantuml\n!theme cerulean-outline   ' clean blue/white\n!theme materia            ' material design\n!theme plain              ' minimal black/white\n!theme spacelab           ' light, professional\n```\n\nFor consistent styling across diagrams, prefer the shared include:\n\n```plantuml\n@startuml MyDiagram\n!include /home/guoxh/.openclaw/skills/plantuml/references/default-style.iuml\n...\n@enduml\n```\n\nThe include sets sensible defaults: dpi 150, no shadows, professional fonts, consistent colors. Override per-diagram as needed.\n\n## Key Conventions\n\n- **File naming:** Use kebab-case for `.puml` filenames (e.g., `order-system-class.puml`).\n- **Diagram label:** Always name `@startuml <PascalCaseName>` — this becomes the output filename.\n- **Charset:** Always pass `-charset UTF-8` for CJK content.\n- **Format:** Default to `-tpng`. Use `-tsvg` for vector output (zoomable, smaller for line art).\n- **Batch:** Pass multiple `.puml` files in one command for efficiency.\n- **Output directory:** Default is same directory as source. Use `-o <dir>` to specify a different output directory.\n- **Style consistency:** `!include` the shared `default-style.iuml` for professional output.\n\n## Rendering & Delivery Workflow\n\n1. Write the `.puml` file to the workspace.\n2. Render:\n   ```bash\n   java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml\n   ```\n   Or use the wrapper:\n   ```bash\n   python3 ~/.openclaw/skills/plantuml/scripts/render.py <file>.puml\n   ```\n3. Verify the output file exists and is non-zero size:\n   ```bash\n   ls -la <DiagramName>.png\n   ```\n4. Attach in your reply by adding a line like:\n   ```\n   MEDIA:/absolute/path/to/DiagramName.png\n   ```\n   The directive must start the line as plain text (no markdown wrappers, not inside code fences). OpenClaw delivers the file via the active channel.\n\n## Smoke Test\n\nVerify the toolchain end-to-end after install or update:\n\n```bash\ncd ~/.openclaw/skills/plantuml/examples\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 sequence-sample.puml\nls -la SequenceSample.png   # should exist, non-zero\n```\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| `Cannot run program \"dot\"` | Graphviz not installed. Sequence diagrams still work; others need `apt install graphviz`. |\n| Empty output file (0 bytes) | Likely a syntax error. Run with `-v` flag to see detailed error output. |\n| Smetana `UnsupportedOperationException` | Avoid `-Playout=smetana`; use Graphviz instead. |\n| CJK garbled text | Ensure `-charset UTF-8` flag is set and source file is UTF-8. |\n| Image too large/small | Add `-DPLANTUML_LIMIT_SIZE=16384` before the jar, or set `skinparam dpi` in source. |\n| C4 stdlib not found | Requires PlantUML ≥ 1.2020.x. Verify with `java -jar ~/tools/plantuml.jar -version`. |\n| `!include` file not found | Use absolute path or path relative to the `.puml` file. |\n\n## Advanced: Output Size Control\n\n```bash\n# Increase max image size (default 4096)\njava -DPLANTUML_LIMIT_SIZE=16384 -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\nWithin the diagram:\n\n```plantuml\nskinparam dpi 150\n```\n\nFile v1.1.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b21fme4bx0xwpm700dj5ehh82zrgq\",\n  \"slug\": \"plantuml\",\n  \"version\": \"1.1.0\",\n  \"publishedAt\": 1781340788505\n}\n\nFile v1.1.0:references/stdlib-guide.md\n\n# PlantUML Standard Library Quick Reference\n\nPlantUML ships with curated stdlib paths usable via `!include <name>`. These produce far better-looking architecture diagrams than raw component shapes.\n\n## C4 Model (Simon Brown)\n\nFour zoom levels: System Context → Container → Component → Code. Use the level that matches your audience.\n\n### System Context\n\n```plantuml\n@startuml C4Context\n!include <C4/C4_Context>\n\ntitle System Context — Order Platform\n\nPerson(customer, \"Customer\", \"Places orders online.\")\nPerson_Ext(courier, \"Courier\", \"Delivers packages.\")\nSystem(orderSys, \"Order System\", \"Handles ordering, billing, fulfilment.\")\nSystem_Ext(payGw, \"Payment Gateway\", \"PCI-compliant third-party processor.\")\nSystem_Ext(emailSys, \"Email Service\", \"Transactional email provider.\")\n\nRel(customer, orderSys, \"Places orders, tracks status\")\nRel(orderSys, payGw, \"Charges card\", \"HTTPS/JSON\")\nRel(orderSys, emailSys, \"Sends receipts\", \"SMTP\")\nRel(orderSys, courier, \"Dispatches shipment\", \"API\")\n@enduml\n```\n\n### Container\n\n```plantuml\n@startuml C4Container\n!include <C4/C4_Container>\n\nPerson(customer, \"Customer\")\nSystem_Boundary(c1, \"Order System\") {\n  Container(web, \"Web App\", \"React + Next.js\", \"Delivers SPA, server-side renders product pages.\")\n  Container(api, \"API Service\", \"Node.js / Express\", \"Business logic, order workflow.\")\n  ContainerDb(db, \"Order DB\", \"PostgreSQL 16\", \"Orders, customers, line items.\")\n  Container(worker, \"Async Worker\", \"Node.js + BullMQ\", \"Email, fulfilment, retries.\")\n  ContainerQueue(queue, \"Job Queue\", \"Redis Streams\", \"Background jobs.\")\n}\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel(customer, web, \"Browses, orders\", \"HTTPS\")\nRel(web, api, \"REST calls\", \"JSON/HTTPS\")\nRel(api, db, \"Reads/writes\", \"SQL\")\nRel(api, queue, \"Enqueues jobs\")\nRel(worker, queue, \"Consumes jobs\")\nRel(api, payGw, \"Charges card\", \"HTTPS/JSON\")\n@enduml\n```\n\n### Component\n\n```plantuml\n@startuml C4Component\n!include <C4/C4_Component>\n\nContainer_Boundary(api, \"API Service\") {\n  Component(orderCtl, \"Order Controller\", \"Express Router\", \"HTTP handlers for /orders.\")\n  Component(orderSvc, \"Order Service\", \"TypeScript class\", \"Order workflow, state transitions.\")\n  Component(payAdapter, \"Payment Adapter\", \"TypeScript class\", \"Wraps Stripe/Adyen SDK.\")\n  Component(repo, \"Order Repository\", \"Prisma\", \"Persistence layer.\")\n}\n\nRel(orderCtl, orderSvc, \"Calls\")\nRel(orderSvc, payAdapter, \"Charge / refund\")\nRel(orderSvc, repo, \"CRUD\")\n@enduml\n```\n\n### Dynamic (sequence-style C4)\n\n```plantuml\n@startuml C4Dynamic\n!include <C4/C4_Dynamic>\n\nPerson(customer, \"Customer\")\nContainer(web, \"Web App\", \"Next.js\")\nContainer(api, \"API\", \"Node.js\")\nContainerDb(db, \"DB\", \"Postgres\")\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel_D(customer, web, \"1. Submit checkout\")\nRel_D(web, api, \"2. POST /orders\")\nRel_D(api, db, \"3. INSERT order\")\nRel_D(api, payGw, \"4. Charge card\")\nRel_U(payGw, api, \"5. Approved\")\nRel_U(api, web, \"6. 201 Created\")\n@enduml\n```\n\n## Archimate (Enterprise Architecture)\n\n```plantuml\n@startuml ArchimateExample\n!include <archimate/Archimate>\n\ntitle Order Capability Map\n\nBusiness_Actor(customer, \"Customer\")\nBusiness_Process(order, \"Order Processing\")\nBusiness_Service(orderSvc, \"Online Ordering\")\nApplication_Component(webApp, \"Web Application\")\nApplication_Component(apiApp, \"Order API\")\nTechnology_Service(db, \"Database Service\")\nTechnology_Node(server, \"App Server\")\n\nRel_Used(customer, orderSvc)\nRel_Realization(orderSvc, order)\nRel_Realization(webApp, orderSvc)\nRel_Used(webApp, apiApp)\nRel_Used(apiApp, db)\nRel_Assignment(server, apiApp)\n@enduml\n```\n\n## AWS Architecture\n\n```plantuml\n@startuml AWSExample\n!define AWSPuml https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v18.0/dist\n!include AWSPuml/AWSCommon.puml\n!include AWSPuml/Compute/EC2.puml\n!include AWSPuml/Database/RDS.puml\n!include AWSPuml/NetworkingContentDelivery/CloudFront.puml\n!include AWSPuml/NetworkingContentDelivery/ElasticLoadBalancing.puml\n\nleft to right direction\n\nCloudFront(cf, \"CDN\", \"CloudFront\")\nElasticLoadBalancing(alb, \"ALB\", \"Application Load Balancer\")\nEC2(web1, \"Web 1\", \"t3.medium\")\nEC2(web2, \"Web 2\", \"t3.medium\")\nRDS(db, \"Order DB\", \"PostgreSQL Multi-AZ\")\n\ncf --> alb\nalb --> web1\nalb --> web2\nweb1 --> db\nweb2 --> db\n@enduml\n```\n\nNote: AWS icons need network access at render time, or pre-cache them locally. See https://github.com/awslabs/aws-icons-for-plantuml.\n\n## Azure Architecture\n\n```plantuml\n@startuml AzureExample\n!define AzurePuml https://raw.githubusercontent.com/plantuml-stdlib/Azure-PlantUML/release/2-9/dist\n!include AzurePuml/AzureCommon.puml\n!include AzurePuml/Compute/AzureAppService.puml\n!include AzurePuml/Databases/AzureSQLDatabase.puml\n\nAzureAppService(web, \"Web App\", \"App Service Plan B2\")\nAzureSQLDatabase(db, \"Order DB\", \"S2 Standard\")\n\nweb --> db : ADO.NET\n@enduml\n```\n\n## Tupadr3 Devicons (technology icons)\n\n```plantuml\n@startuml TechStack\n!define DEVICONS https://raw.githubusercontent.com/tupadr3/plantuml-icon-font-sprites/master/devicons2\n!include DEVICONS/python.puml\n!include DEVICONS/postgresql.puml\n!include DEVICONS/redis.puml\n!include DEVICONS/nginx.puml\n\nrectangle \"<$python>\\nAPI\" as api\nrectangle \"<$postgresql>\\nDB\" as db\nrectangle \"<$redis>\\nCache\" as cache\nrectangle \"<$nginx>\\nProxy\" as proxy\n\nproxy --> api\napi --> db\napi --> cache\n@enduml\n```\n\n## Choosing the Right Stdlib\n\n| Need | Use |\n|------|-----|\n| Software architecture (4 zoom levels) | C4 |\n| Enterprise / business + IT alignment | Archimate |\n| Cloud-vendor-specific deployment | AWS / Azure / GCP icons |\n| Tech stack illustration with logos | Tupadr3 devicons |\n| Generic boxes/lines | Plain `component` / `node` |\n\n## Rendering Notes\n\n- **Local stdlib** (`<C4/...>`, `<archimate/...>`) ships in the jar — no network needed.\n- **External icon sets** (AWS, Azure, devicons) fetch from GitHub at render time. For offline rendering, mirror the icon repos locally and include with absolute paths.\n- **Themes interact with stdlibs**: C4 has its own visual style; avoid mixing `!theme` with `<C4/...>` unless you've tested the combination.\n\nFile v1.1.0:references/syntax-guide.md\n\n# PlantUML Syntax Quick Reference\n\n## Themes\n\nBuilt-in themes (set near the top of the file, after `@startuml`):\n\n```plantuml\n!theme plain               ' minimal black/white\n!theme cerulean-outline    ' clean blue/white\n!theme materia             ' material design\n!theme spacelab            ' light, professional\n!theme sketchy             ' hand-drawn look\n!theme cyborg              ' dark mode\n```\n\nFull list: https://the-lum.github.io/puml-themes-gallery/\n\n## Common Skinparam\n\n```plantuml\nskinparam classAttributeIconSize 0   ' hide visibility icons in class diagrams\nskinparam packageStyle rectangle     ' rectangle-style packages\nskinparam actorStyle awesome         ' stick-figure actors\nskinparam defaultFontSize 12\nskinparam dpi 150                    ' resolution control\nskinparam shadowing false            ' disable shadows\nskinparam monochrome true            ' grayscale output\nskinparam backgroundColor #FFFFFF\n```\n\nFor consistency, prefer the shared include:\n\n```plantuml\n!include /home/guoxh/.openclaw/skills/plantuml/references/default-style.iuml\n```\n\n## Use Case Diagram\n\n### Actors & Use Cases\n```plantuml\nactor \"Regular User\" as User\nactor Admin\nusecase \"Login\" as UC1\nusecase \"Manage Users\" as UC2\n```\n\n### Relationships\n```plantuml\nUser --> UC1\nUC2 .> UC1 : <<include>>     ' dashed arrow, FROM base TO included\nUC3 .> UC1 : <<extend>>      ' dashed arrow, FROM extension TO base\nAdmin <|-- User              ' generalization (Admin inherits User)\n```\n\n### System Boundary\n```plantuml\nrectangle \"System Name\" {\n  usecase \"UC1\" as UC1\n  usecase \"UC2\" as UC2\n}\n```\n\n## Class Diagram\n\n### Visibility\n- `+` public, `-` private, `#` protected, `~` package\n\n### Relationships\n```plantuml\nClassA <|-- ClassB              ' generalization (inheritance)\nClassA *-- ClassB               ' composition (filled diamond on A)\nClassA o-- ClassB               ' aggregation (hollow diamond on A)\nClassA --> ClassB               ' association\nClassA ..> ClassB               ' dependency (dashed)\nClassA ..|> InterfaceB          ' realization (dashed, hollow triangle)\n```\n\n### Multiplicity & Labels\n```plantuml\nClassA \"1\" --> \"0..*\" ClassB : label >\n```\n\n### Abstract & Interfaces\n```plantuml\nabstract class Shape { }        ' name in italics\ninterface Drawable { }          ' <<interface>> stereotype\n```\n\n### Notes\n```plantuml\nnote left of ClassA : Some note\nnote right of ClassB\n  Multi-line note\nend note\n```\n\n## Sequence Diagram\n\n### Messages\n```plantuml\nA -> B  : synchronous call\nA ->> B : asynchronous call\nA --> B : return (dashed)\nA -> A  : self-call\n```\n\n### Activation Bars\n```plantuml\nA -> B : msg\nactivate B\nB --> A : reply\ndeactivate B\n```\n\n### Fragments\n```plantuml\nalt condition 1\n  A -> B : msg1\nelse condition 2\n  A -> B : msg2\nend\n\nopt optional condition\n  A -> B : msg3\nend\n\nloop for each item\n  A -> B : msg4\nend\n\npar parallel\n  A -> B : msg5\nelse\n  A -> C : msg6\nend\n```\n\n### Grouping & Notes\n```plantuml\ngroup Description\n  A -> B : msg\nend\n\nnote left of A : note text\nnote over A, B : note spanning lifelines\n```\n\n### Delay & Separators\n```plantuml\n... 5 minutes later ...\n== Section Title ==\n```\n\n## Activity Diagram\n\n### Basic Flow\n```plantuml\nstart\n:Action 1;\n:Action 2;\nstop\n```\n\n### Branching\n```plantuml\nif (condition?) then (yes)\n  :action A;\nelse (no)\n  :action B;\nendif\n```\n\n### Loops\n```plantuml\nrepeat\n  :action;\nrepeat while (more?)\n```\n\n```plantuml\nwhile (condition?) is (yes)\n  :action;\nendwhile (no)\n```\n\n### Parallel & Swimlanes\n```plantuml\n|Swimlane 1|\nstart\n:action A;\n|Swimlane 2|\n:action B;\n|Swimlane 1|\n:action C;\nstop\n```\n\n### Fork/Join\n```plantuml\nstart\nfork\n  :branch 1;\nfork again\n  :branch 2;\nend fork\nstop\n```\n\n## State Diagram\n\n```plantuml\n[*] --> State1\nState1 --> State2 : event1 [guard] / action\nState2 --> State3 : event2\nState3 --> [*]\n\n' Composite state\nstate \"Active\" as Active {\n  [*] --> Running\n  Running --> Paused : pause\n  Paused --> Running : resume\n}\nState1 --> Active : activate\nActive --> [*] : deactivate\n```\n\n## Component Diagram\n\n```plantuml\ncomponent [Component A] as CA\ncomponent [Component B] as CB\ninterface \"API\" as API\n\nCA -right- API\nAPI -right- CB\n```\n\n## Deployment Diagram\n\n```plantuml\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n```\n\n## ER Diagram\n\n```plantuml\nentity \"Customer\" as customer {\n  * customer_id : BIGINT <<PK>>\n  --\n  * name : VARCHAR\n  * email : VARCHAR\n}\nentity \"Order\" as order {\n  * order_id : BIGINT <<PK>>\n  --\n  * customer_id : BIGINT <<FK>>\n  * order_date : DATE\n}\ncustomer ||--o{ order\n```\n\n## Timing Diagram\n\n```plantuml\n@startuml TimingExample\nrobust \"Browser\" as B\nconcise \"Network\" as N\n\n@0\nB is Idle\nN is Down\n\n@+100\nB is Connecting\nN is Up\n\n@+200\nB is Active\n\n@+500\nB is Idle\nN is Down\n@enduml\n```\n\n## Mindmap\n\n```plantuml\n@startmindmap\n* Project\n** Backend\n*** API\n*** DB\n** Frontend\n*** Web\n*** Mobile\n** Ops\n*** CI/CD\n*** Monitoring\n@endmindmap\n```\n\n## WBS (Work Breakdown Structure)\n\n```plantuml\n@startwbs\n* Release 1.0\n** Design\n*** Use cases\n*** Data model\n** Implementation\n*** Backend\n*** Frontend\n** Testing\n*** Unit\n*** Integration\n@endwbs\n```\n\n## Gantt\n\n```plantuml\n@startgantt\nProject starts 2026-06-01\n[Design] lasts 10 days\n[Implementation] lasts 20 days\n[Implementation] starts at [Design]'s end\n[Testing] lasts 7 days\n[Testing] starts at [Implementation]'s end\n@endgantt\n```\n\n## JSON / YAML Visualization\n\n```plantuml\n@startjson\n{\n  \"name\": \"Order\",\n  \"id\": 42,\n  \"items\": [\n    { \"sku\": \"A1\", \"qty\": 2 },\n    { \"sku\": \"B2\", \"qty\": 1 }\n  ]\n}\n@endjson\n```\n\n## Common Pitfalls\n\n1. **Reserved words:** Avoid using `end`, `subgraph`, `graph`, `flowchart` as node/participant IDs.\n2. **Quotes required:** Use double quotes around labels containing `()`, `,`, `:`, or `/`.\n3. **Include vs Extend direction:**\n   - `<<include>>`: arrow FROM base use case TO included use case\n   - `<<extend>>`: arrow FROM extending use case TO base use case\n4. **Composition diamond:** Filled diamond (`*--`) is on the **whole/owner** side, not the part side.\n5. **Sequence alt/else:** Always close with `end`.\n6. **C4 stdlib + custom theme:** Don't combine `!theme` with `<C4/...>` unless tested — C4 brings its own colors.\n7. **`!include` paths:** Use absolute paths or paths relative to the `.puml` file's directory.\n\nFile v1.1.0:skill-card.md\n\n## Description: <br>\nGenerate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[guoxh](https://clawhub.ai/user/guoxh) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to author PlantUML source, render diagrams locally, and attach generated PNG or SVG artifacts in agent responses. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Local rendering commands execute Java and Python and write diagram outputs. <br>\nMitigation: Render only trusted .puml sources, keep output paths in the workspace, and review generated files before sharing them. <br>\nRisk: PlantUML !include paths can reference remote URLs or absolute local files. <br>\nMitigation: Review remote and absolute include paths before rendering and avoid untrusted includes. <br>\nRisk: Capability tags mention financial authority and purchase authority even though the security guidance identifies them as unrelated metadata noise. <br>\nMitigation: Do not grant financial or purchasing authority based on these tags; treat the skill as a diagram-rendering aid. <br>\n\n\n## Reference(s): <br>\n- [PlantUML Syntax Quick Reference](references/syntax-guide.md) <br>\n- [PlantUML Standard Library Quick Reference](references/stdlib-guide.md) <br>\n- [PlantUML Themes Gallery](https://the-lum.github.io/puml-themes-gallery/) <br>\n- [AWS Icons for PlantUML](https://raw.githubusercontent.com/awslabs/aws-icons-for-plantuml/v18.0/dist) <br>\n- [ClawHub Skill Page](https://clawhub.ai/guoxh/plantuml) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Guidance, Markdown, Code, Shell commands, Files] <br>\n**Output Format:** [Markdown with PlantUML code blocks, shell commands, and MEDIA file directives; rendered outputs are diagram files such as PNG or SVG.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Uses local Java and Python rendering commands and writes generated diagram files to the workspace or selected output directory.] <br>\n\n## Skill Version(s): <br>\n1.1.0 (source: server release evidence) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.1: 5 files, 6788 bytes\n\nFiles: references/syntax-guide.md (4524b), scripts/render.py (3000b), skill-card.md (1864b), SKILL.md (4589b), _meta.json (127b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: plantuml\ndescription: Generate UML diagrams (use case, class, sequence, activity, state, component, deployment, object, timing, and more) using PlantUML. Use when the user asks to draw, create, or generate any UML diagram, or mentions PlantUML, UML, use case diagram, class diagram, sequence diagram, activity diagram, state diagram, or any structural/behavioral diagram.\n---\n\n# PlantUML Diagram Generation\n\n## One-Liner\n\n```bash\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\n## Prerequisites\n\n- **PlantUML jar:** `~/tools/plantuml.jar`\n- **Graphviz:** Required for most diagram types. Verify with `dot -V`.\n- **Java:** Required runtime. Verify with `java -version`.\n\nIf Graphviz is missing, sequence diagrams still render (they use the built-in lambda renderer), but other diagram types will fail.\n\n## Quick Start\n\n1. Write `.puml` source file\n2. Generate image: `java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml`\n3. PlantUML uses the word after `@startuml` as the output filename (e.g., `@startuml MyDiagram` → `MyDiagram.png`)\n4. Copy to outbound media dir and send via `message` tool — OpenClaw will handle path resolution automatically\n\n## Diagram Types & Syntax\n\nSee [references/syntax-guide.md](references/syntax-guide.md) for detailed syntax per diagram type.\n\n### Use Case Diagram\n\n```plantuml\n@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml\n```\n\n### Class Diagram\n\n```plantuml\n@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml\n```\n\n### Sequence Diagram\n\n```plantuml\n@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml\n```\n\n### Activity Diagram\n\n```plantuml\n@startuml DiagramName\nstart\n:Step 1;\nif (Condition?) then (yes)\n  :Step 2a;\nelse (no)\n  :Step 2b;\nendif\nstop\n@enduml\n```\n\n### State Diagram\n\n```plantuml\n@startuml DiagramName\n[*] --> Idle\nIdle --> Processing : start\nProcessing --> Done : complete\nProcessing --> Error : fail\nDone --> [*]\nError --> [*]\n@enduml\n```\n\n### Component Diagram\n\n```plantuml\n@startuml DiagramName\ncomponent [Web App] as WA\ncomponent [API Server] as API\ninterface \"REST API\" as REST\n\nWA -right- REST\nREST -right- API\n@enduml\n```\n\n### Deployment Diagram\n\n```plantuml\n@startuml DiagramName\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n@enduml\n```\n\n## Key Conventions\n\n- **File naming:** Use kebab-case for `.puml` filenames (e.g., `order-system-class.puml`).\n- **Diagram label:** Always name `@startuml <PascalCaseName>` — this becomes the output filename.\n- **Charset:** Always pass `-charset UTF-8` for CJK content.\n- **Format:** Default to `-tpng`. Use `-tsvg` for vector output when needed.\n- **Batch:** Pass multiple `.puml` files in one command for efficiency.\n- **Output directory:** Default is same directory as source. Use `-o <dir>` to specify a different output directory.\n\n## Rendering & Delivery Workflow\n\n1. Write `.puml` to workspace\n2. Run: `java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml`\n3. Verify output exists and has nonzero size\n4. Copy PNG to `~/.openclaw/media/outbound/` (create if needed)\n5. Send via `message` tool with `media` parameter — OpenClaw handles path resolution automatically\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| `Cannot run program \"dot\"` | Graphviz not installed. Sequence diagrams still work; others need `apt install graphviz`. |\n| Empty output file (0 bytes) | Likely a syntax error. Run with `-v` flag to see detailed error output. |\n| Smetana `UnsupportedOperationException` | Avoid `-Playout=smetana`; use Graphviz instead. |\n| CJK garbled text | Ensure `-charset UTF-8` flag is set and source file is UTF-8. |\n| Image too large/small | Add `-DPLANTUML_LIMIT_SIZE=16384` before the jar, or resize in the puml with `skinparam dpi`. |\n\n## Advanced: Output Size Control\n\n```bash\n# Increase max image size (default 4096)\njava -DPLANTUML_LIMIT_SIZE=16384 -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\nWithin the diagram:\n```plantuml\nskinparam dpi 150\n```\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7b21fme4bx0xwpm700dj5ehh82zrgq\",\n  \"slug\": \"plantuml\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778573671799\n}\n\nFile v1.0.1:references/syntax-guide.md\n\n# PlantUML Syntax Quick Reference\n\n## Common Skinparam\n\n```plantuml\nskinparam classAttributeIconSize 0   ' hide visibility icons in class diagrams\nskinparam packageStyle rectangle     ' rectangle-style packages\nskinparam actorStyle awesome         ' stick-figure actors\nskinparam defaultFontSize 12\nskinparam dpi 150                    ' resolution control\nskinparam shadowing false            ' disable shadows\nskinparam monochrome true            ' grayscale output\n```\n\n## Use Case Diagram\n\n### Actors & Use Cases\n```plantuml\nactor \"Regular User\" as User\nactor Admin\nusecase \"Login\" as UC1\nusecase \"Manage Users\" as UC2\n```\n\n### Relationships\n```plantuml\nUser --> UC1\nUC2 .> UC1 : <<include>>     ' dashed arrow, FROM base TO included\nUC3 .> UC1 : <<extend>>      ' dashed arrow, FROM extension TO base\nAdmin <|-- User               ' generalization (Admin inherits User)\n```\n\n### System Boundary\n```plantuml\nrectangle \"System Name\" {\n  usecase \"UC1\" as UC1\n  usecase \"UC2\" as UC2\n}\n```\n\n## Class Diagram\n\n### Visibility\n- `+` public, `-` private, `#` protected, `~` package\n\n### Relationships\n```plantuml\nClassA <|-- ClassB              ' generalization (inheritance)\nClassA *-- ClassB               ' composition (filled diamond on A)\nClassA o-- ClassB               ' aggregation (hollow diamond on A)\nClassA --> ClassB               ' association\nClassA ..> ClassB               ' dependency (dashed)\nClassA ..|> InterfaceB          ' realization (dashed, hollow triangle)\n```\n\n### Multiplicity & Labels\n```plantuml\nClassA \"1\" --> \"0..*\" ClassB : label >\n```\n\n### Abstract & Interfaces\n```plantuml\nabstract class Shape { }        ' name in italics\ninterface Drawable { }          ' <<interface>> stereotype\n```\n\n### Notes\n```plantuml\nnote left of ClassA : Some note\nnote right of ClassB\n  Multi-line note\nend note\n```\n\n## Sequence Diagram\n\n### Messages\n```plantuml\nA -> B  : synchronous call\nA ->> B : asynchronous call\nA --> B : return (dashed)\nA ->> B : self-call\n```\n\n### Activation Bars\n```plantuml\nA -> B : msg\nactivate B\nB --> A : reply\ndeactivate B\n```\n\n### Fragments\n```plantuml\nalt condition 1\n  A -> B : msg1\nelse condition 2\n  A -> B : msg2\nend\n\nopt optional condition\n  A -> B : msg3\nend\n\nloop for each item\n  A -> B : msg4\nend\n\npar parallel\n  A -> B : msg5\nelse\n  A -> C : msg6\nend\n```\n\n### Grouping & Notes\n```plantuml\ngroup Description\n  A -> B : msg\nend\n\nnote left of A : note text\nnote over A, B : note spanning lifelines\n```\n\n### Delay & Separators\n```plantuml\n... 5 minutes later ...\n== Section Title ==\n```\n\n## Activity Diagram\n\n### Basic Flow\n```plantuml\nstart\n:Action 1;\n:Action 2;\nstop\n```\n\n### Branching\n```plantuml\nif (condition?) then (yes)\n  :action A;\nelse (no)\n  :action B;\nendif\n```\n\n### Loops\n```plantuml\nrepeat\n  :action;\nrepeat while (more?)\n```\n\n```plantuml\nwhile (condition?) is (yes)\n  :action;\nendwhile (no)\n```\n\n### Parallel & Swimlanes\n```plantuml\n|Swimlane 1|\nstart\n:action A;\n|Swimlane 2|\n:action B;\n|Swimlane 1|\n:action C;\nstop\n```\n\n### Fork/Join\n```plantuml\nstart\nfork\n  :branch 1;\nfork again\n  :branch 2;\nend fork\nstop\n```\n\n## State Diagram\n\n```plantuml\n[*] --> State1\nState1 --> State2 : event1 [guard] / action\nState2 --> State3 : event2\nState3 --> [*]\n\n' Composite state\nstate \"Active\" as Active {\n  [*] --> Running\n  Running --> Paused : pause\n  Paused --> Running : resume\n}\nState1 --> Active : activate\nActive --> [*] : deactivate\n```\n\n## Component Diagram\n\n```plantuml\ncomponent [Component A] as CA\ncomponent [Component B] as CB\ninterface \"API\" as API\n\nCA -right- API\nAPI -right- CB\n```\n\n## Deployment Diagram\n\n```plantuml\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n```\n\n## ER Diagram\n\n```plantuml\nentity \"Customer\" as customer {\n  * customer_id : BIGINT <<PK>>\n  --\n  * name : VARCHAR\n  * email : VARCHAR\n}\nentity \"Order\" as order {\n  * order_id : BIGINT <<PK>>\n  --\n  * customer_id : BIGINT <<FK>>\n  * order_date : DATE\n}\ncustomer ||--o{ order\n```\n\n## Common Pitfalls\n\n1. **Reserved words:** Avoid using `end`, `subgraph`, `graph`, `flowchart` as node/participant IDs.\n2. **Quotes required:** Use double quotes around labels containing `()`, `,`, `:`, or `/`.\n3. **Include vs Extend direction:**\n   - `<<include>>`: arrow FROM base use case TO included use case\n   - `<<extend>>`: arrow FROM extending use case TO base use case\n4. **Composition diamond:** Filled diamond (`*--`) is on the **whole/owner** side, not the part side.\n5. **Sequence alt/else:** Always close with `end`.\n\nFile v1.0.1:skill-card.md\n\n## Description: <br>\nGenerate UML diagrams (use case, class, sequence, activity, state, component, deployment, object, timing, and more) using PlantUML. <br>\n\nThis skill is ready for commercial/non-commercial use. <br>\n\n## Publisher: <br>\n[guoxh](https://clawhub.ai/user/guoxh) <br>\n\n### License/Terms of Use: <br>\nMIT-0 <br>\n\n\n## Use Case: <br>\nDevelopers and engineers use this skill to draft PlantUML source and render UML diagrams for software architecture, workflows, deployment views, and related system documentation. <br>\n\n### Deployment Geography for Use: <br>\nGlobal <br>\n\n## Known Risks and Mitigations: <br>\nRisk: Rendering untrusted or sensitive PlantUML content with a local jar can create diagram files in the workspace or outbound media directory. <br>\nMitigation: Use trusted Java, Graphviz, and PlantUML jar sources, and avoid rendering untrusted diagrams or sensitive content unless generated file retention is acceptable. <br>\n\n\n## Reference(s): <br>\n- [PlantUML Syntax Quick Reference](references/syntax-guide.md) <br>\n- [ClawHub PlantUML Skill Page](https://clawhub.ai/guoxh/plantuml) <br>\n\n\n## Skill Output: <br>\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Files, Guidance] <br>\n**Output Format:** [Markdown guidance with PlantUML source blocks, shell commands, and generated diagram files such as PNG or SVG.] <br>\n**Output Parameters:** [1D] <br>\n**Other Properties Related to Output:** [Requires local Java, a trusted PlantUML jar, and Graphviz for most diagram types.] <br>\n\n## Skill Version(s): <br>\n1.0.1 (source: server release metadata) <br>\n\n## Ethical Considerations: <br>\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment. <br>\n\nArchive v1.0.0: 4 files, 5759 bytes\n\nFiles: references/syntax-guide.md (4524b), scripts/render.py (3000b), SKILL.md (4599b), _meta.json (127b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: plantuml\ndescription: Generate UML diagrams (use case, class, sequence, activity, state, component, deployment, object, timing, and more) using PlantUML. Use when the user asks to draw, create, or generate any UML diagram, or mentions PlantUML, UML, use case diagram, class diagram, sequence diagram, activity diagram, state diagram, or any structural/behavioral diagram.\n---\n\n# PlantUML Diagram Generation\n\n## One-Liner\n\n```bash\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\n## Prerequisites\n\n- **PlantUML jar:** `~/tools/plantuml.jar`\n- **Graphviz:** Required for most diagram types. Verify with `dot -V`.\n- **Java:** Required runtime. Verify with `java -version`.\n\nIf Graphviz is missing, sequence diagrams still render (they use the built-in lambda renderer), but other diagram types will fail.\n\n## Quick Start\n\n1. Write `.puml` source file\n2. Generate image: `java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml`\n3. PlantUML uses the word after `@startuml` as the output filename (e.g., `@startuml MyDiagram` → `MyDiagram.png`)\n4. Copy to outbound media dir and send via `message` tool — OpenClaw will handle path resolution automatically\n\n## Diagram Types & Syntax\n\nSee [references/syntax-guide.md](references/syntax-guide.md) for detailed syntax per diagram type.\n\n### Use Case Diagram\n\n```plantuml\n@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml\n```\n\n### Class Diagram\n\n```plantuml\n@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml\n```\n\n### Sequence Diagram\n\n```plantuml\n@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml\n```\n\n### Activity Diagram\n\n```plantuml\n@startuml DiagramName\nstart\n:Step 1;\nif (Condition?) then (yes)\n  :Step 2a;\nelse (no)\n  :Step 2b;\nendif\nstop\n@enduml\n```\n\n### State Diagram\n\n```plantuml\n@startuml DiagramName\n[*] --> Idle\nIdle --> Processing : start\nProcessing --> Done : complete\nProcessing --> Error : fail\nDone --> [*]\nError --> [*]\n@enduml\n```\n\n### Component Diagram\n\n```plantuml\n@startuml DiagramName\ncomponent [Web App] as WA\ncomponent [API Server] as API\ninterface \"REST API\" as REST\n\nWA -right- REST\nREST -right- API\n@enduml\n```\n\n### Deployment Diagram\n\n```plantuml\n@startuml DiagramName\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n@enduml\n```\n\n## Key Conventions\n\n- **File naming:** Use kebab-case for `.puml` filenames (e.g., `order-system-class.puml`).\n- **Diagram label:** Always name `@startuml <PascalCaseName>` — this becomes the output filename.\n- **Charset:** Always pass `-charset UTF-8` for CJK content.\n- **Format:** Default to `-tpng`. Use `-tsvg` for vector output when needed.\n- **Batch:** Pass multiple `.puml` files in one command for efficiency.\n- **Output directory:** Default is same directory as source. Use `-o <dir>` to specify a different output directory.\n\n## Rendering & Delivery Workflow\n\n1. Write `.puml` to workspace\n2. Run: `java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml`\n3. Verify output exists and has nonzero size\n4. Copy PNG to `/home/guoxh/.openclaw/media/outbound/` (create if needed)\n5. Send via `message` tool with `media` parameter — OpenClaw handles path resolution automatically\n\n## Troubleshooting\n\n| Problem | Solution |\n|---------|----------|\n| `Cannot run program \"dot\"` | Graphviz not installed. Sequence diagrams still work; others need `apt install graphviz`. |\n| Empty output file (0 bytes) | Likely a syntax error. Run with `-v` flag to see detailed error output. |\n| Smetana `UnsupportedOperationException` | Avoid `-Playout=smetana`; use Graphviz instead. |\n| CJK garbled text | Ensure `-charset UTF-8` flag is set and source file is UTF-8. |\n| Image too large/small | Add `-DPLANTUML_LIMIT_SIZE=16384` before the jar, or resize in the puml with `skinparam dpi`. |\n\n## Advanced: Output Size Control\n\n```bash\n# Increase max image size (default 4096)\njava -DPLANTUML_LIMIT_SIZE=16384 -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\nWithin the diagram:\n```plantuml\nskinparam dpi 150\n```\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7b21fme4bx0xwpm700dj5ehh82zrgq\",\n  \"slug\": \"plantuml\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1778506204489\n}\n\nFile v1.0.0:references/syntax-guide.md\n\n# PlantUML Syntax Quick Reference\n\n## Common Skinparam\n\n```plantuml\nskinparam classAttributeIconSize 0   ' hide visibility icons in class diagrams\nskinparam packageStyle rectangle     ' rectangle-style packages\nskinparam actorStyle awesome         ' stick-figure actors\nskinparam defaultFontSize 12\nskinparam dpi 150                    ' resolution control\nskinparam shadowing false            ' disable shadows\nskinparam monochrome true            ' grayscale output\n```\n\n## Use Case Diagram\n\n### Actors & Use Cases\n```plantuml\nactor \"Regular User\" as User\nactor Admin\nusecase \"Login\" as UC1\nusecase \"Manage Users\" as UC2\n```\n\n### Relationships\n```plantuml\nUser --> UC1\nUC2 .> UC1 : <<include>>     ' dashed arrow, FROM base TO included\nUC3 .> UC1 : <<extend>>      ' dashed arrow, FROM extension TO base\nAdmin <|-- User               ' generalization (Admin inherits User)\n```\n\n### System Boundary\n```plantuml\nrectangle \"System Name\" {\n  usecase \"UC1\" as UC1\n  usecase \"UC2\" as UC2\n}\n```\n\n## Class Diagram\n\n### Visibility\n- `+` public, `-` private, `#` protected, `~` package\n\n### Relationships\n```plantuml\nClassA <|-- ClassB              ' generalization (inheritance)\nClassA *-- ClassB               ' composition (filled diamond on A)\nClassA o-- ClassB               ' aggregation (hollow diamond on A)\nClassA --> ClassB               ' association\nClassA ..> ClassB               ' dependency (dashed)\nClassA ..|> InterfaceB          ' realization (dashed, hollow triangle)\n```\n\n### Multiplicity & Labels\n```plantuml\nClassA \"1\" --> \"0..*\" ClassB : label >\n```\n\n### Abstract & Interfaces\n```plantuml\nabstract class Shape { }        ' name in italics\ninterface Drawable { }          ' <<interface>> stereotype\n```\n\n### Notes\n```plantuml\nnote left of ClassA : Some note\nnote right of ClassB\n  Multi-line note\nend note\n```\n\n## Sequence Diagram\n\n### Messages\n```plantuml\nA -> B  : synchronous call\nA ->> B : asynchronous call\nA --> B : return (dashed)\nA ->> B : self-call\n```\n\n### Activation Bars\n```plantuml\nA -> B : msg\nactivate B\nB --> A : reply\ndeactivate B\n```\n\n### Fragments\n```plantuml\nalt condition 1\n  A -> B : msg1\nelse condition 2\n  A -> B : msg2\nend\n\nopt optional condition\n  A -> B : msg3\nend\n\nloop for each item\n  A -> B : msg4\nend\n\npar parallel\n  A -> B : msg5\nelse\n  A -> C : msg6\nend\n```\n\n### Grouping & Notes\n```plantuml\ngroup Description\n  A -> B : msg\nend\n\nnote left of A : note text\nnote over A, B : note spanning lifelines\n```\n\n### Delay & Separators\n```plantuml\n... 5 minutes later ...\n== Section Title ==\n```\n\n## Activity Diagram\n\n### Basic Flow\n```plantuml\nstart\n:Action 1;\n:Action 2;\nstop\n```\n\n### Branching\n```plantuml\nif (condition?) then (yes)\n  :action A;\nelse (no)\n  :action B;\nendif\n```\n\n### Loops\n```plantuml\nrepeat\n  :action;\nrepeat while (more?)\n```\n\n```plantuml\nwhile (condition?) is (yes)\n  :action;\nendwhile (no)\n```\n\n### Parallel & Swimlanes\n```plantuml\n|Swimlane 1|\nstart\n:action A;\n|Swimlane 2|\n:action B;\n|Swimlane 1|\n:action C;\nstop\n```\n\n### Fork/Join\n```plantuml\nstart\nfork\n  :branch 1;\nfork again\n  :branch 2;\nend fork\nstop\n```\n\n## State Diagram\n\n```plantuml\n[*] --> State1\nState1 --> State2 : event1 [guard] / action\nState2 --> State3 : event2\nState3 --> [*]\n\n' Composite state\nstate \"Active\" as Active {\n  [*] --> Running\n  Running --> Paused : pause\n  Paused --> Running : resume\n}\nState1 --> Active : activate\nActive --> [*] : deactivate\n```\n\n## Component Diagram\n\n```plantuml\ncomponent [Component A] as CA\ncomponent [Component B] as CB\ninterface \"API\" as API\n\nCA -right- API\nAPI -right- CB\n```\n\n## Deployment Diagram\n\n```plantuml\nnode \"Web Server\" as WS {\n  component [Web App] as WA\n}\nnode \"DB Server\" as DB {\n  database [Database] as D\n}\nWA ..> D : JDBC\n```\n\n## ER Diagram\n\n```plantuml\nentity \"Customer\" as customer {\n  * customer_id : BIGINT <<PK>>\n  --\n  * name : VARCHAR\n  * email : VARCHAR\n}\nentity \"Order\" as order {\n  * order_id : BIGINT <<PK>>\n  --\n  * customer_id : BIGINT <<FK>>\n  * order_date : DATE\n}\ncustomer ||--o{ order\n```\n\n## Common Pitfalls\n\n1. **Reserved words:** Avoid using `end`, `subgraph`, `graph`, `flowchart` as node/participant IDs.\n2. **Quotes required:** Use double quotes around labels containing `()`, `,`, `:`, or `/`.\n3. **Include vs Extend direction:**\n   - `<<include>>`: arrow FROM base use case TO included use case\n   - `<<extend>>`: arrow FROM extending use case TO base use case\n4. **Composition diamond:** Filled diamond (`*--`) is on the **whole/owner** side, not the part side.\n5. **Sequence alt/else:** Always close with `end`.","readmeExcerpt":"Skill: PlantUML Owner: guoxh Summary: Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Tags: latest:1.1.1 Version history: v1.1.1 | 2026-06-13T14:42:47.400Z | user Add explicit security/trust notes for local Java/Graphviz rendering and URL-based PlantUML includes; clarify no credentials or account access are required. v1.1.0 | 2026-06-13T08:53:08.505Z | user Upgrade PlantUML","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml"},{"language":"bash","snippet":"java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml"},{"language":"plantuml","snippet":"@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml"},{"language":"plantuml","snippet":"@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml"},{"language":"plantuml","snippet":"@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml"},{"language":"plantuml","snippet":"@startuml DiagramName\nstart\n:Step 1;\nif (Condition?) then (yes)\n  :Step 2a;\nelse (no)\n  :Step 2b;\nendif\nstop\n@enduml"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: plantuml\ndescription: \"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\"\n---\n\n# PlantUML Diagram Generation\n\n## One-Liner\n\n```bash\njava -jar ~/tools/plantuml.jar -tpng -charset UTF-8 file.puml\n```\n\n## Prerequisites\n\n- **PlantUML jar:** `~/tools/plantuml.jar`\n- **Graphviz:** Required for most diagram types. Verify with `dot -V`.\n- **Java:** Required runtime. Verify with `java -version`.\n\nIf Graphviz is missing, sequence diagrams still render (they use the built-in lambda renderer), but other diagram types will fail.\n\n## Security & Trust Notes\n\nThis skill is a local diagram-generation helper. It does not require credentials, account access, production data access, or background automation. It only documents how to write PlantUML source and render it with local Java/Graphviz tooling.\n\nRendering PlantUML executes the local PlantUML Java jar and, for most non-sequence diagrams, local Graphviz. Treat `.puml` files as source code: review diagrams before rendering when they come from untrusted input, and render inside a controlled workspace.\n\nMost examples use PlantUML's local stdlib. A few optional icon examples in `references/stdlib-guide.md` show external `!include` URLs for AWS/Azure/devicons; those may fetch resources from GitHub at render time. For sensitive/offline environments, mirror icon libraries locally or avoid URL-based includes.\n\n## Quick Start\n\n1. Write `.puml` source file (kebab-case filename).\n2. Generate image:\n   ```bash\n   java -jar ~/tools/plantuml.jar -tpng -charset UTF-8 <file>.puml\n   ```\n3. PlantUML uses the word after `@startuml` as the output filename (e.g., `@startuml MyDiagram` → `MyDiagram.png`).\n4. Attach the resulting PNG/SVG in your reply with a `MEDIA:<absolute-path>` directive line — OpenClaw delivers it.\n\n## Diagram Types & Syntax\n\n- Detailed per-type syntax: [references/syntax-guide.md](references/syntax-guide.md)\n- Architecture stdlib (C4, Archimate, AWS, Azure): [references/stdlib-guide.md](references/stdlib-guide.md)\n- Shared style include: [references/default-style.iuml](references/default-style.iuml)\n- Ready-to-render examples: [examples/](examples/)\n\n### Use Case Diagram\n\n```plantuml\n@startuml DiagramName\nleft to right direction\nskinparam packageStyle rectangle\nskinparam actorStyle awesome\n\nactor User\nactor Admin\n\nrectangle \"System Name\" {\n  usecase \"Login\" as UC1\n  usecase \"Do Something\" as UC2\n}\n\nUser --> UC1\nUser --> UC2\nUC2 .> UC1 : <<include>>\n@enduml\n```\n\n### Class Diagram\n\n```plantuml\n@startuml DiagramName\nskinparam classAttributeIconSize 0\n\nabstract class Shape {\n  + draw(): void\n}\nclass Circle {\n  - radius: double\n}\nShape <|-- Circle\n\nCircle \"1\" --> \"0..*\" Point : contains >\n@enduml\n```\n\n### Sequence Diagram\n\n```plantuml\n@startuml DiagramName\nactor User\nparticipant \":System\" as SYS\n\nUser -> SYS : request()\nactivate SYS\nSYS --> User : response()\ndeactivate SYS\n\nalt success\n  SYS --> User : ok\nelse failure\n  SYS --> User : error\nend\n@enduml\n```\n\n### Ac"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7b21fme4bx0xwpm700dj5ehh82zrgq\",\n  \"slug\": \"plantuml\",\n  \"version\": \"1.1.1\",\n  \"publishedAt\": 1781361767400\n}"},{"path":"references/stdlib-guide.md","content":"# PlantUML Standard Library Quick Reference\n\nPlantUML ships with curated stdlib paths usable via `!include <name>`. These produce far better-looking architecture diagrams than raw component shapes.\n\n## C4 Model (Simon Brown)\n\nFour zoom levels: System Context → Container → Component → Code. Use the level that matches your audience.\n\n### System Context\n\n```plantuml\n@startuml C4Context\n!include <C4/C4_Context>\n\ntitle System Context — Order Platform\n\nPerson(customer, \"Customer\", \"Places orders online.\")\nPerson_Ext(courier, \"Courier\", \"Delivers packages.\")\nSystem(orderSys, \"Order System\", \"Handles ordering, billing, fulfilment.\")\nSystem_Ext(payGw, \"Payment Gateway\", \"PCI-compliant third-party processor.\")\nSystem_Ext(emailSys, \"Email Service\", \"Transactional email provider.\")\n\nRel(customer, orderSys, \"Places orders, tracks status\")\nRel(orderSys, payGw, \"Charges card\", \"HTTPS/JSON\")\nRel(orderSys, emailSys, \"Sends receipts\", \"SMTP\")\nRel(orderSys, courier, \"Dispatches shipment\", \"API\")\n@enduml\n```\n\n### Container\n\n```plantuml\n@startuml C4Container\n!include <C4/C4_Container>\n\nPerson(customer, \"Customer\")\nSystem_Boundary(c1, \"Order System\") {\n  Container(web, \"Web App\", \"React + Next.js\", \"Delivers SPA, server-side renders product pages.\")\n  Container(api, \"API Service\", \"Node.js / Express\", \"Business logic, order workflow.\")\n  ContainerDb(db, \"Order DB\", \"PostgreSQL 16\", \"Orders, customers, line items.\")\n  Container(worker, \"Async Worker\", \"Node.js + BullMQ\", \"Email, fulfilment, retries.\")\n  ContainerQueue(queue, \"Job Queue\", \"Redis Streams\", \"Background jobs.\")\n}\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel(customer, web, \"Browses, orders\", \"HTTPS\")\nRel(web, api, \"REST calls\", \"JSON/HTTPS\")\nRel(api, db, \"Reads/writes\", \"SQL\")\nRel(api, queue, \"Enqueues jobs\")\nRel(worker, queue, \"Consumes jobs\")\nRel(api, payGw, \"Charges card\", \"HTTPS/JSON\")\n@enduml\n```\n\n### Component\n\n```plantuml\n@startuml C4Component\n!include <C4/C4_Component>\n\nContainer_Boundary(api, \"API Service\") {\n  Component(orderCtl, \"Order Controller\", \"Express Router\", \"HTTP handlers for /orders.\")\n  Component(orderSvc, \"Order Service\", \"TypeScript class\", \"Order workflow, state transitions.\")\n  Component(payAdapter, \"Payment Adapter\", \"TypeScript class\", \"Wraps Stripe/Adyen SDK.\")\n  Component(repo, \"Order Repository\", \"Prisma\", \"Persistence layer.\")\n}\n\nRel(orderCtl, orderSvc, \"Calls\")\nRel(orderSvc, payAdapter, \"Charge / refund\")\nRel(orderSvc, repo, \"CRUD\")\n@enduml\n```\n\n### Dynamic (sequence-style C4)\n\n```plantuml\n@startuml C4Dynamic\n!include <C4/C4_Dynamic>\n\nPerson(customer, \"Customer\")\nContainer(web, \"Web App\", \"Next.js\")\nContainer(api, \"API\", \"Node.js\")\nContainerDb(db, \"DB\", \"Postgres\")\nSystem_Ext(payGw, \"Payment Gateway\")\n\nRel_D(customer, web, \"1. Submit checkout\")\nRel_D(web, api, \"2. POST /orders\")\nRel_D(api, db, \"3. INSERT order\")\nRel_D(api, payGw, \"4. Charge card\")\nRel_U(payGw, api, \"5. Approved\")\nRel_U(api, web, \"6. 201 Created\")\n@enduml\n```\n\n## Archimate (Enterprise Architecture)\n\n```plantuml\n"},{"path":"references/syntax-guide.md","content":"# PlantUML Syntax Quick Reference\n\n## Themes\n\nBuilt-in themes (set near the top of the file, after `@startuml`):\n\n```plantuml\n!theme plain               ' minimal black/white\n!theme cerulean-outline    ' clean blue/white\n!theme materia             ' material design\n!theme spacelab            ' light, professional\n!theme sketchy             ' hand-drawn look\n!theme cyborg              ' dark mode\n```\n\nFull list: https://the-lum.github.io/puml-themes-gallery/\n\n## Common Skinparam\n\n```plantuml\nskinparam classAttributeIconSize 0   ' hide visibility icons in class diagrams\nskinparam packageStyle rectangle     ' rectangle-style packages\nskinparam actorStyle awesome         ' stick-figure actors\nskinparam defaultFontSize 12\nskinparam dpi 150                    ' resolution control\nskinparam shadowing false            ' disable shadows\nskinparam monochrome true            ' grayscale output\nskinparam backgroundColor #FFFFFF\n```\n\nFor consistency, prefer the shared include:\n\n```plantuml\n!include /home/guoxh/.openclaw/skills/plantuml/references/default-style.iuml\n```\n\n## Use Case Diagram\n\n### Actors & Use Cases\n```plantuml\nactor \"Regular User\" as User\nactor Admin\nusecase \"Login\" as UC1\nusecase \"Manage Users\" as UC2\n```\n\n### Relationships\n```plantuml\nUser --> UC1\nUC2 .> UC1 : <<include>>     ' dashed arrow, FROM base TO included\nUC3 .> UC1 : <<extend>>      ' dashed arrow, FROM extension TO base\nAdmin <|-- User              ' generalization (Admin inherits User)\n```\n\n### System Boundary\n```plantuml\nrectangle \"System Name\" {\n  usecase \"UC1\" as UC1\n  usecase \"UC2\" as UC2\n}\n```\n\n## Class Diagram\n\n### Visibility\n- `+` public, `-` private, `#` protected, `~` package\n\n### Relationships\n```plantuml\nClassA <|-- ClassB              ' generalization (inheritance)\nClassA *-- ClassB               ' composition (filled diamond on A)\nClassA o-- ClassB               ' aggregation (hollow diamond on A)\nClassA --> ClassB               ' association\nClassA ..> ClassB               ' dependency (dashed)\nClassA ..|> InterfaceB          ' realization (dashed, hollow triangle)\n```\n\n### Multiplicity & Labels\n```plantuml\nClassA \"1\" --> \"0..*\" ClassB : label >\n```\n\n### Abstract & Interfaces\n```plantuml\nabstract class Shape { }        ' name in italics\ninterface Drawable { }          ' <<interface>> stereotype\n```\n\n### Notes\n```plantuml\nnote left of ClassA : Some note\nnote right of ClassB\n  Multi-line note\nend note\n```\n\n## Sequence Diagram\n\n### Messages\n```plantuml\nA -> B  : synchronous call\nA ->> B : asynchronous call\nA --> B : return (dashed)\nA -> A  : self-call\n```\n\n### Activation Bars\n```plantuml\nA -> B : msg\nactivate B\nB --> A : reply\ndeactivate B\n```\n\n### Fragments\n```plantuml\nalt condition 1\n  A -> B : msg1\nelse condition 2\n  A -> B : msg2\nend\n\nopt optional condition\n  A -> B : msg3\nend\n\nloop for each item\n  A -> B : msg4\nend\n\npar parallel\n  A -> B : msg5\nelse\n  A -> C : msg6\nend\n```\n\n### Grouping & Notes\n```plantuml\ngroup Description\n  A -> B : msg\nend\n\nnote left of A : note "},{"path":"skill-card.md","content":"## Description:\n\nGenerate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[guoxh](https://clawhub.ai/user/guoxh)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nDevelopers and engineers use this skill to author PlantUML source for UML, C4 architecture, ER, timing, mindmap, WBS, and Gantt diagrams and render local diagram outputs with Java and Graphviz tooling.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: Rendering untrusted .puml files runs local PlantUML and, for most non-sequence diagrams, Graphviz on diagram source.\n\nMitigation: Review .puml source before rendering and run untrusted diagrams in a controlled workspace.\n\nRisk: URL-based AWS, Azure, or devicon includes can fetch mutable content from GitHub during rendering.\n\nMitigation: Mirror icon libraries locally or avoid URL-based includes in sensitive or offline environments.\n\nRisk: Most non-sequence diagram types fail when Graphviz is missing or unavailable.\n\nMitigation: Verify Java, PlantUML, and Graphviz before use; use sequence diagrams only when Graphviz is not installed.\n\n## Reference(s):\n\n- [PlantUML Syntax Quick Reference](references/syntax-guide.md)\n- [PlantUML Standard Library Quick Reference](references/stdlib-guide.md)\n- [PlantUML Themes Gallery](https://the-lum.github.io/puml-themes-gallery/)\n- [AWS Icons for PlantUML](https://github.com/awslabs/aws-icons-for-plantuml)\n\n## Skill Output:\n\n**Output Type(s):** [Text, Markdown, Code, Shell commands, Configuration, Guidance, Files]\n\n**Output Format:** [Markdown guidance with PlantUML code blocks and shell commands; rendered diagram files may be PNG, SVG, PDF, EPS, TXT, or UTXT.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [Requires local Java and PlantUML tooling; Graphviz is required for most non-sequence diagram types.]\n\n## Skill Version(s):\n\n1.1.1 (source: server release evidence)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Skill: PlantUML Owner: guoxh Summary: Generate UML, C4, architecture, timing, ER, mindmap, WBS, and Gantt diagrams with PlantUML. Tags: latest:1.1.1 Version history: v1.1.1 | 2026-06-13T14:42:47.400Z | user Add explicit security/trust notes for local Java/Graphviz rendering and URL-based PlantUML includes; clarify no credentials or account access are required. v1.1.0 | 2026-06-13T08:53:08.505Z | user Upgrade PlantUML","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1301,"uniquenessScore":51,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:53:25.079Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-14T17:04:36.341Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}