smithery.ai

flowchart

Generate flowcharts and diagrams using typst with cetz

First seen Mar 31, 2026

Installation

$ npx skills add https://smithery.ai

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery.ai · top by installs.

npx skills add https://smithery.ai

Browse all from smithery.ai

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 2,499 B
  • docs SUMMARY.md 71 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 1 installs

SKILL.md

Flowchart (L2 - Directed)

You are executing the flowchart skill.

User Request

$ARGUMENTS

Purpose

Generate flowcharts, state diagrams, and process flows using typst and cetz.

Autonomy Level: L2 (Directed)

  • Human: Describe the flow, review output
  • AI: Generate cetz code, compile, iterate

Input

Describe your flowchart in plain text or structured format:

start -> process A -> decision?
  yes -> process B -> end
  no -> process C -> process A

Output Template

#import "@preview/cetz:0.3.2"

#cetz.canvas({
  import cetz.draw: *
  
  // Styles
  let node(pos, label, name, shape: "rect") = {
    if shape == "rect" {
      rect(
        (pos.at(0) - 1, pos.at(1) - 0.4),
        (pos.at(0) + 1, pos.at(1) + 0.4),
        name: name
      )
    } else if shape == "diamond" {
      // Decision node
      let s = 0.6
      line(
        (pos.at(0), pos.at(1) + s),
        (pos.at(0) + s, pos.at(1)),
        (pos.at(0), pos.at(1) - s),
        (pos.at(0) - s, pos.at(1)),
        close: true,
        name: name
      )
    } else if shape == "circle" {
      circle(pos, radius: 0.4, name: name)
    }
    content(pos, label)
  }
  
  let arrow(from, to, label: none, anchor: "south") = {
    line(from, to, mark: (end: ">"))
    if label != none {
      content((from, 50%, to), label, anchor: anchor)
    }
  }
  
  // Nodes
  node((0, 4), "Start", "start", shape: "circle")
  node((0, 2), "Process A", "a")
  node((0, 0), "Decision?", "d", shape: "diamond")
  node((2, 0), "Process B", "b")
  node((-2, 0), "Process C", "c")
  node((2, -2), "End", "end", shape: "circle")
  
  // Arrows
  arrow("start.south", "a.north")
  arrow("a.south", "d.north")
  arrow("d.east", "b.west", label: "yes")
  arrow("d.west", "c.east", label: "no")
  arrow("b.south", "end.north")
  arrow("c.south", (rel: (0, -1)), (rel: (0, 0)), "a.west")
})

Node Types

Shape Use Cetz
Rectangle Process/Action rect()
Diamond Decision 4-point line()
Circle Start/End circle()
Parallelogram Input/Output skewed line()

Common Patterns

Sequential

A -> B -> C -> D

Branch

A -> B?
  yes -> C
  no -> D

Loop

A -> B -> check?
  continue -> B
  done -> C

Human Checkpoint

  • Verify flow logic matches intent
  • Check labels are clear
  • Adjust layout/spacing as needed