sketch

Diagram types

Every diagram type sketch draws, as a picture, as text and as Mermaid source.

sketch draws 33 diagram types: every type that pele draws. This page shows 32 of them. It leaves out info, which only shows the version of pele.

Each diagram has three tabs:

  • Picture is the SVG from sketch.Render, drawn by sketch/raster in the theme of this site.
  • Text is the drawing from sketch/text, as tuios mermaid --format text prints it in an 80-column terminal. It is real text: you can select it and copy it.
  • Source is the Mermaid source of both.

The tabs on this page work together. Select Text on one diagram, and every diagram shows its text drawing. The page keeps your choice.

The pictures, the text drawings and the sources come from the same build of sketch. A script makes them again when sketch changes. Nobody draws them by hand.

Read a text drawing

  • Lines and arrows are grey, boxes are cyan, and notes are yellow. Titles are bold. The data series of a chart take blue, yellow, green, red, cyan and magenta.
  • A terminal shows these 16 ANSI colours in its own palette. This page shows them in the palette of the site.
  • A drawing wider than 80 columns says so under it. Scroll a drawing sideways when it does not fit the page.

Summary

TypeMermaid keywordGoldens that matchText drawing
Flowchartflowchart114 of 114The layout of the SVG, mapped to cells
StatestateDiagram-v222 of 22The layout of the SVG, mapped to cells, with composite states as frames
ClassclassDiagram38 of 38The layout of the SVG, mapped to cells, with the members in each box
Entity relationshiperDiagram25 of 25The layout of the SVG, mapped to cells, with the attributes in each box
Blockblock30 of 30Drawn as a flowchart is
Architecturearchitecture-beta6 of 6Drawn as a flowchart is
RequirementrequirementDiagram9 of 9Drawn as a flowchart is
C4C4Context6 of 6Drawn as a flowchart is
Use caseusecase-beta24 of 24Drawn as a flowchart is
Agent flowagentflow-beta12 of 12Drawn as a flowchart is
Swimlaneswimlane-beta13 of 13A flowchart with its lanes as bands
SequencesequenceDiagram38 of 38The layout of the SVG, mapped to cells: lifelines run down, and messages run across
Ganttgantt11 of 11Bars on a date axis
Timelinetimeline14 of 14It runs across, and runs down when it does not fit the columns
User journeyjourney1 of 1It runs across, and runs down when it does not fit the columns
Git graphgitGraph35 of 35It runs down, one row for each commit, with the oldest commit at the top
Event modeleventmodeling12 of 12Swimlanes in time order, or a list of frames when it is narrow
Piepie2 of 2One bar for each slice, with its percentage and value
XY chartxychart8 of 8Bars and lines drawn with plot
Quadrant chartquadrantChart3 of 3A box in four parts, with the points as dots
Sankeysankey8 of 8Columns of boxes joined by lines
Radarradar-beta3 of 3A table with one bar for each curve on each axis
Treemaptreemap-beta8 of 8Nested boxes, or an indented tree when the boxes are too small
Vennvenn-beta8 of 8A table of the sets and their overlaps
Packetpacket4 of 4Rows of bit fields
Mindmapmindmap13 of 13A tree
Tree viewtreeView-beta13 of 13Drawn as the tree command draws a folder
Ishikawaishikawa-beta1 of 1A spine with the causes as bones, or an indented tree when it is narrow
Kanbankanban3 of 3Columns side by side, in more rows when they do not fit
Cynefincynefin-beta3 of 3A grid of the four domains
Wardley mapwardley-beta19 of 19A grid of visibility by evolution, or a table when it is narrow
Railroadrailroad-ebnf-beta14 of 14The tracks in cells, or the rules as EBNF text when they do not fit

The goldens are the SVG files that pele drew from the 522 sources of its documentation corpus. sketch must write the same file, byte for byte. Fidelity and tests says how.

A Mermaid type that pele does not draw, such as zenuml, gives an error with the code unsupported-diagram.

Graphs

Boxes joined by lines. sketch works out the layout in layers, as pele does. sketch/text maps that layout to cells.

Flowchart

  • Keyword: flowchart, graph or flowchart-elk, with a direction such as TB or LR.
  • Goldens: 114 of 114 match pele.
  • Text: The layout of the SVG, mapped to cells. When it does not fit, sketch asks for a narrower layout: a flowchart that runs across turns to run down, and columns that hold only gaps close up.
A flowchart of a key press in tuios: a mode decision sends it to the PTY inside a pane group, to the leader key, or to a window action, and every path ends in a frame
                                        ╭───────────────╮
                                        │   Key press   │
                                        ╰───────────────╯
                                                │
                                                ▼
                                        ╱──────────────╲
                                        <    Mode?     >
                                        ╲──────────────╱
                ┌─────────────────────────────┘ │ └───────────────────────────────┐
                │                               │                                 │
            Terminal                         Prefix                            Window
                │                               │                                 │
 ┌─ Inside the pane ──────────┐                 │                                 │
 │              │             │                 │                                 │
 │              ▼             │                 │                                 │
 │  ┌──────────────────────┐  │                 │                                 │
 │  │   Write to the PTY   │  │                 │                                 │
 │  └──────────────────────┘  │                 │                                 │
 │              │             │                 │                                 │
 │              ▼             │                 ▼                                 ▼
 │      ┌───────────────┐     │        ╱─────────────────╲              ┌───────────────────┐
 │      │  VT emulator  │     │        <   Leader key    >              │   Window action   │
 │      └───────────────┘     │        ╲─────────────────╱              └───────────────────┘
 │              │             │               │ │ │                               │
 │              ▼             │               │ │ │                               │
 │        ╭───────────╮       │               │ │ │                               │
 │        │ Cell grid │       │               │ │ │                               │
 │        ╰───────────╯    ┌──┼───────────────┘ │ └───────────────────┐           │
 │              ┃          │  │                 │                     │           │
 └──────────────╋──────────┼──┘                 │                     │           │
                ┃          │                    │                     │           │
                ┃          c                    [                     w           │
                ┃          │                    │                     │           │
                ┃          ▼                    ▼                     ▼           │
                ┃   ┌─────────────┐     ┌──────────────┐      ┌──────────────┐    │
                ┃   │  New pane   │     │  Copy mode   │      │  Workspace   │    │
                ┃   └─────────────┘     └──────────────┘      └──────────────┘    │
                ┃          │                    │                     │           │
                ┃          └────────────────────┴─────────┬─┐  ┌─┬────┴───────────┘
                ┃                                         ▼ ▼  ▼ ▼
                ┃                                      ┌──────────┐
                ┃                                      │  Layout  │
                ┃                                      └──────────┘
                ┃                                            ┃
                ┗━━━━━━━━━━━━━━━━━━┓  ┏━━━━━━━━━━━━━━━━━━━━━━┛
                                   ▼  ▼
                                 ╭───────╮
                                 │ Frame │
                                 ╰───────╯

93 columns, 49 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

flowchart TB
  key([Key press]) --> mode{Mode?}
  mode -->|Terminal| pty[/Write to the PTY/]
  mode -->|Prefix| prefix{{Leader key}}
  mode -->|Window| wm[[Window action]]

  subgraph pane [Inside the pane]
    pty --> vt[VT emulator]
    vt --> grid[(Cell grid)]
  end

  prefix -->|c| new[New pane]
  prefix -->|"["| copy[Copy mode]
  prefix -->|w| ws[Workspace]
  wm & new & copy & ws --> layout[Layout]
  grid & layout ==> frame((Frame))

  classDef input fill:#3b82f62e,stroke:#3b82f6,stroke-width:2px
  classDef inner fill:#22c55e2e,stroke:#22c55e,stroke-width:2px
  classDef action fill:#a855f72e,stroke:#a855f7,stroke-width:2px
  classDef out fill:#f973162e,stroke:#f97316,stroke-width:2px
  class key,mode input
  class pty,vt,grid inner
  class prefix,wm,new,copy,ws,layout action
  class frame out
  style pane fill:#22c55e0d,stroke:#22c55e,stroke-dasharray:6 4
  linkStyle 13,14 stroke:#f97316,stroke-width:3px

State

  • Keyword: stateDiagram-v2 or stateDiagram.
  • Goldens: 22 of 22 match pele.
  • Text: The layout of the SVG, mapped to cells, with composite states as frames.
A state diagram of an agent: idle, a working state with nested thinking and tool states, a fork into two subagents, and waiting, done and failed
                                                                                         ●
                                                                                         │
                                                                                         ▼
                                                                                     ╭───────╮
                                                                                     │ Idle  │
                                                                                     ╰───────╯
                                                                                        │ ▲
                                                    ┌───────────────────────────────────┘ └───────────────────────────────────────┐
                                                    │                                                                             │
                                                  task                                                                            │
                                                    │                                                                             │
                                                    ▼                                                                             │
           ┌─ Working ──────────────────────────────────────────────────────────────────────┐                                     │
           │                                                                                │                                     │
           │                                        ●                                       │                                     │
           │                                        │                                       │                                     │
           │                                        ▼                                       │                                     │
           │                                 ╭────────────╮                                 │                                     │
           │                                 │  Thinking  │                                 │                                     │
           │                                 ╰────────────╯                                 │                                     │
           │                                  ┌────┘ ▲                                      │                                     │
           │                                  │      └────┐                                 │                                     │
           │                             call a tool   result                               │                                     │
           │                                  └─────┐┌────┘                                 │                                     │
           │                                        ▼│                                      │                                     │
           │ ┌─ Tool ────────────────────────────────┴───────────────────────────────────┐  │                                     │
           │ │                                                                           │  │                                     │
           │ │           ╭────────────╮       ╭───────────╮       ╭───────────╮          │  │                                     │
           │ │   ● ─────►│  Reading   │──────►│  Editing  │──────►│  Testing  │─────► ◉  │  │                                     │
           │ │           ╰────────────╯       ╰───────────╯       ╰───────────╯          │  │                                     │
           │ └───────────────────────────────────────────────────────────────────────────┘  │                                     │
           └────────────────────────────────────────┬─┬─────────────────────────────────────┘                                     │
                                                    │▲│▲                                                                          │
                    ┌────────────────────────────┬──┴┘└┴────────┬──────────────────────────────────────────────┐                  │
                    │                            │              │                                              │                  │
             plan has parts                      │              │                                            stop                 │
                    │                            │              │                                              │                  │
                    │                            │              │                                              ▼                  │
                    ▼                            │              │                                              ╱╲                 │
             ━━━━━━━━━━━━━━━                     │            reply                                            ╲╱               retry
                    ││                           │              │                                             │││                 │
                    ││                           │              │       ┌─────────────────────────────────────┘│└────────────┐    │
                    ││                           │              │       │                                      │             │    │
                    ││                           │              │  needs input                             finished        error  │
                    ││                           │              └┐      │                                      │             │    │
         ┌──────────┘└──────────┐                │              ┌┼──────┘                                      │             │    │
         ▼                      ▼                │              ▼│                                             ▼             ▼    │
 ╭───────────────╮      ╭───────────────╮        │        ╭───────────╮      ┌────────────────────┐       ╭─────────╮     ╭──────────╮
 │   SubagentA   │      │   SubagentB   │      merge      │  Waiting  │┄┄┄┄┄┄│ Shows in the Inbox │       │  Done   │     │  Failed  │
 ╰───────────────╯      ╰───────────────╯        │        ╰───────────╯      └────────────────────┘       ╰─────────╯     ╰──────────╯
         │                      │                │                                                             │
         └───────────────────┐┌┬┴────────────────┘                                                             │
                             ▼▼│                                                                               │
                      ━━━━━━━━━━━━━━━                                                                          ▼
                                                                                                               ◉

134 columns, 55 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

stateDiagram-v2
  direction TB
  state spread <<fork>>
  state gather <<join>>
  state check <<choice>>

  [*] --> Idle
  Idle --> Working: task

  state Working {
    [*] --> Thinking
    Thinking --> Tool: call a tool
    Tool --> Thinking: result
    state Tool {
      direction LR
      [*] --> Reading
      Reading --> Editing
      Editing --> Testing
      Testing --> [*]
    }
  }

  Working --> spread: plan has parts
  spread --> SubagentA
  spread --> SubagentB
  SubagentA --> gather
  SubagentB --> gather
  gather --> Working: merge

  Working --> check: stop
  check --> Waiting: needs input
  check --> Done: finished
  check --> Failed: error
  Waiting --> Working: reply
  Failed --> Idle: retry
  Done --> [*]

  note right of Waiting
    Shows in the Inbox
  end note

  classDef busy fill:var(--pele-series-6),fill-opacity:0.18,stroke:var(--pele-series-6),stroke-width:2px
  classDef wait fill:var(--pele-series-3),fill-opacity:0.18,stroke:var(--pele-series-3),stroke-width:2px
  classDef good fill:var(--pele-series-4),fill-opacity:0.18,stroke:var(--pele-series-4),stroke-width:2px
  classDef bad fill:var(--pele-series-1),fill-opacity:0.18,stroke:var(--pele-series-1),stroke-width:2px
  classDef sub fill:var(--pele-series-7),fill-opacity:0.18,stroke:var(--pele-series-7),stroke-width:2px
  class Thinking,Reading,Editing,Testing busy
  class Waiting wait
  class Done good
  class Failed bad
  class SubagentA,SubagentB sub

Class

  • Keyword: classDiagram.
  • Goldens: 38 of 38 match pele.
  • Text: The layout of the SVG, mapped to cells, with the members in each box.
A class diagram of the agent interface, its two implementations, an enumeration, and the daemon, session, pane and host classes with their links and multiplicities
                   ┌─────────────────────────┐
                   │       «interface»       │
                   │          Agent          │                                           ┌─────────────────────┐
                   ├─────────────────────────┤                                           │  One per machine.   │
                   ├─────────────────────────┤                                           │  Panes live here.   │
                   │ +State() : AgentState   │                                           └─────────────────────┘
                   │ +Reply(text string)     │                                                      ┆
                   └─────────────────────────┘                                                      ┆
                          ▲ 0..1 △△   ┆                                                             ┆
                          │      ┆┆   └┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┐                                 ┆
                          │      ┆┆                               ┆                                 ┆
   ┌──────────────────────┘      ┆┆                            reports                              ┆
   │                             ┆┆                               ┆                                 ┆
   │                             ┆┆                               ▼               ┌───────────────────────────────────┐
   │                             ┆┆                      ┌─────────────────┐      │             «service»             │
   │                 ┌┄┄┄┄┄┄┄┄┄┄┄┘└┄┄┄┄┄┄┄┄┄┐            │  «enumeration»  │      │              Daemon               │
   │                 ┆                      ┆            │   AgentState    │      ├───────────────────────────────────┤
   │       ┌──────────────────┐       ┌──────────┐       ├─────────────────┤      │ -sessions map<string, Session>    │
 runs      │    ClaudeCode    │       │  Codex   │       │ Working         │      │ -hosts List<Host>                 │
   │       └──────────────────┘       └──────────┘       │ Waiting         │      ├───────────────────────────────────┤
   │                                                     │ Done            │      │ +Attach(client Client) : error    │
   │                                                     └─────────────────┘      │ +Upgrade(binary string) : error   │
   │                                                                              └───────────────────────────────────┘
   │                                                                                              ◆ 1 ◇ 1
   │                                                                                              │   │
   │                                                          ┌───────────────────────────────────┘   └─────────────┐
   │                                                          │                                                     │
   │                                                        owns                                                links to
   │                                                          │                                                     │
   │                                                          │ *                                                   │
   │                                          ┌───────────────────────────────┐                                     │ *
   │                                          │            Session            │                            ┌────────────────┐
   │                                          ├───────────────────────────────┤                            │      Host      │
   │                                          │ +Name string                  │                            ├────────────────┤
   │                                          │ +Workspaces [9]Workspace      │                            │ +Name string   │
   │                                          ├───────────────────────────────┤                            ├────────────────┤
   │                                          │ +Panes() : List<Pane>         │                            │ +Link() : Link │
   │                                          └───────────────────────────────┘                            └────────────────┘
   │                                                          ◆ 1
   │                                                          │
   └────────┐                                                 │
            │                                               holds
            │                                                 │
            │   ┌─────────────────────────────────────────────┘
            │   │
            │ 1 │ *
 ┌────────────────────────┐
 │          Pane          │
 ├────────────────────────┤
 │ +ID int                │
 │ +Title string          │
 │ -pty PTY               │
 ├────────────────────────┤
 │ +Write(data []byte)    │
 │ +Snapshot() : Screen   │
 └────────────────────────┘

125 columns, 56 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

classDiagram
  direction TB
  class Daemon {
    <<service>>
    -sessions map~string, Session~
    -hosts List~Host~
    +Attach(client Client) error
    +Upgrade(binary string) error
  }
  class Session {
    +Name string
    +Workspaces [9]Workspace
    +Panes() List~Pane~
  }
  class Pane {
    +ID int
    +Title string
    -pty PTY
    +Write(data []byte)
    +Snapshot() Screen
  }
  class Agent {
    <<interface>>
    +State() AgentState
    +Reply(text string)
  }
  class ClaudeCode
  class Codex
  class AgentState {
    <<enumeration>>
    Working
    Waiting
    Done
  }
  class Host {
    +Name string
    +Link() Link$
  }

  Daemon "1" *-- "*" Session : owns
  Daemon "1" o-- "*" Host : links to
  Session "1" *-- "*" Pane : holds
  Agent "0..1" <-- "1" Pane : runs
  Agent <|.. ClaudeCode
  Agent <|.. Codex
  Agent ..> AgentState : reports

  note for Daemon "One per machine.<br/>Panes live here."

  classDef core fill:var(--pele-series-6),fill-opacity:0.18,stroke:var(--pele-series-6),stroke-width:2px
  classDef agent fill:var(--pele-series-2),fill-opacity:0.18,stroke:var(--pele-series-2),stroke-width:2px
  classDef data fill:var(--pele-series-4),fill-opacity:0.18,stroke:var(--pele-series-4),stroke-width:2px
  cssClass "Daemon,Session,Pane" core
  cssClass "Agent,ClaudeCode,Codex" agent
  cssClass "AgentState,Host" data

Entity relationship

  • Keyword: erDiagram.
  • Goldens: 25 of 25 match pele.
  • Text: The layout of the SVG, mapped to cells, with the attributes in each box.
An ER diagram of hosts, users, sessions, agents, approvals, checkpoints and panes, with keys and crow's foot links
 ┌──────────────────────┐       ┌────────────────────┐         ┌─────────────────────────────────────────────┐
 │         HOST         │       │        USER        │         │                    AGENT                    │
 ├──────────────────────┤       ├────────────────────┤         ├─────────────────────────────────────────────┤
 │ string  name     PK  │       │ string  login  PK  │         │ int     pane     FK                         │
 │ string  address  UK  │       │ string  theme      │         │ string  harness      claude or codex        │
 │ string  version      │       └────────────────────┘         │ string  state        working, waiting, done │
 └──────────────────────┘                 │ 1 │ 1              └─────────────────────────────────────────────┘
             │ 1                          │   │                                    │ 1 │ 0..1 │ 1
             │                    ┌───────┘   └──────┐              ┌──────────────┘   │      └───────────┐
             │                    │                  │              │                  │                  │
             │                    │                  │              │                ┌─┘                  │
           runs              attaches to          answers         asks               │                  saves
             │                    │                  │              │                │                    │
             └┐      ┌────────────┘                  └─────┐      ┌─┘                │                    │
              │ 0..* │ 0..*                                │ 0..* │ 0..*             │                    │ 0..*
   ┌────────────────────────┐                    ┌───────────────────────┐           │         ┌─────────────────────┐
   │        SESSION         │                    │       APPROVAL        │           │         │     CHECKPOINT      │
   ├────────────────────────┤                    ├───────────────────────┤           │         ├─────────────────────┤
   │ string    name     PK  │                    │ int     id       PK   │        runs in      │ string  id      PK  │
   │ string    host     FK  │                    │ string  command       │           │         │ string  commit      │
   │ datetime  started      │                    │ bool    allowed       │           │         └─────────────────────┘
   └────────────────────────┘                    └───────────────────────┘           │
                │ 1                                                                  │
                │                                                                    │
              holds                                                                  │
                │                                                                    │
                └─────────────────────────┐      ┌───────────────────────────────────┘
                                          │ 1..* │ 1
                               ┌──────────────────────┐
                               │         PANE         │
                               ├──────────────────────┤
                               │ int     id       PK  │
                               │ string  cwd          │
                               │ string  program      │
                               └──────────────────────┘

118 columns, 35 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

erDiagram
  HOST ||--o{ SESSION : runs
  USER ||--o{ SESSION : "attaches to"
  SESSION ||--|{ PANE : holds
  AGENT |o--|| PANE : "runs in"
  AGENT ||--o{ APPROVAL : asks
  USER ||--o{ APPROVAL : answers
  AGENT ||--o{ CHECKPOINT : saves

  HOST {
    string name PK
    string address UK
    string version
  }
  SESSION {
    string name PK
    string host FK
    datetime started
  }
  PANE {
    int id PK
    string cwd
    string program
  }
  AGENT {
    int pane FK
    string harness "claude or codex"
    string state "working, waiting, done"
  }
  APPROVAL {
    int id PK
    string command
    bool allowed
  }
  CHECKPOINT {
    string id PK
    string commit
  }
  USER {
    string login PK
    string theme
  }

  classDef machine fill:#3b82f62e,stroke:#3b82f6
  classDef live fill:#22c55e2e,stroke:#22c55e
  classDef agent fill:#f973162e,stroke:#f97316
  classDef person fill:#a855f72e,stroke:#a855f7
  class HOST,SESSION machine
  class PANE live
  class USER person
  class AGENT,APPROVAL,CHECKPOINT agent

Block

  • Keyword: block or block-beta.
  • Goldens: 30 of 30 match pele.
  • Text: Drawn as a flowchart is. A block arrow shows an arrow character.
A block diagram of four clients above an attach arrow, the daemon with its wire protocol, sessions, panes and agents, and the parts below it
 ┌────────────┐ ┌────────────┐  ┌────────────┐ ┌────────────┐
 │  Terminal  │ │    Web     │  │    SSH     │ │   Phone    │
 └────────────┘ └────────────┘  └────────────┘ └────────────┘

 ┌──────────────────────────────────────────────────────────┐
 │                         ↓ attach                         │
 └──────────────────────────────────────────────────────────┘

┌────────────────────────────────────────────────────────────┐
│                                                            │
│  ╱───────────────────────────────────────────────────────╲ │
│  <                     Wire protocol                     > │
│  ╲───────────────────────────────────────────────────────╱ │
│                                                            │
│ ┌────────────────┐  ┌────────────────┐  ┌────────────────┐ │
│ │    Sessions    │  │     Panes      │  │     Agents     │ │
│ └────────────────┘  └────────────────┘  └────────────────┘ │
└────────────────────────────────────────────────────────────┘

  ╭───────────────────────────╮ ╭────────────╮ ╭────────────╮
  │     VT and scrollback     │ │    PTY     │ │ Host links │
  ╰───────────────────────────╯ ╰────────────╯ ╰────────────╯

62 columns, 22 rows, drawn for 80 columns.

block
  columns 4
  tui["Terminal"] web["Web"] ssh["SSH"] phone["Phone"]
  attach<["attach"]>(down):4
  block:daemon:4
    columns 3
    wire{{"Wire protocol"}}:3
    sessions["Sessions"] panes["Panes"] agents["Agents"]
  end
  vt[("VT and scrollback")]:2 pty(["PTY"]) links(["Host links"])

Architecture

  • Keyword: architecture-beta, or architecture.
  • Goldens: 6 of 6 match pele.
  • Text: Drawn as a flowchart is. A service with no title shows the name of its icon.
An architecture diagram with a laptop group and a build server group, their services with icons, and a phone that links to the server
  ┌─ Laptop ──────────────────────────────────────────┐       ┌─ Build server ─────────────────────────┐
  │                                                   │       │                                        │
  │                                                   │       │   ┌─────────┐                          │
  │  ┌──────────────────┐        ┌────────────────┐   │       │   │ Remote  │       ┌──────────────┐   │
  │  │ Terminal client  │───────►│  tuios daemon  │◄──┼───────┼──►│ daemon  │──────►│ Build cache  │   │
  │  └──────────────────┘        └────────────────┘   │       │   └─────────┘       └──────────────┘   │
  │                                       │           │       │        ▲                               │
  │                                       │           │       │        │                               │
  │                                       │           │       └────────┼───────────────────────────────┘
  │                                       │           │                │
  │                                       ▼           │                │
  │                              ┌────────────────┐   │            ┌───────┐
  │                              │ Session state  │   │            │ Phone │
  │                              └────────────────┘   │            └───────┘
  │                                                   │
  └───────────────────────────────────────────────────┘

104 columns, 16 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

architecture-beta
  group laptop(server)[Laptop]
  service client(internet)[Terminal client] in laptop
  service daemon(server)[tuios daemon] in laptop
  service state(disk)[Session state] in laptop

  group build(cloud)[Build server]
  service remote(server)[Remote daemon] in build
  service cache(database)[Build cache] in build

  service phone(internet)[Phone]

  client:R --> L:daemon
  daemon:B --> T:state
  daemon:R <--> L:remote
  remote:R --> L:cache
  phone:T --> B:remote

Requirement

  • Keyword: requirementDiagram, or requirement.
  • Goldens: 9 of 9 match pele.
  • Text: Drawn as a flowchart is.
A requirement diagram of the live upgrade requirement, three requirements it contains, and the elements that satisfy and verify them
                                                                           ┌────────────────────┐
                                                                           │     «Element»      │
                                                                           │        e2e         │
                                                                           │   Type: E2E test   │
                                                                           │  Doc Ref: e2e/tui  │
                                                                           └────────────────────┘
                                                                                      ┆
                                                                                 «verifies»
                                                                                      ┆
                                                                                      ▼
                                                              ┌──────────────────────────────────────────────┐
      ┌───────────────────────────┐                           │                «Requirement»                 │
      │         «Element»         │                           │                 live_upgrade                 │
      │          handoff          │                           │                    ID: 1                     │
      │     Type: Go package      │                           │     Text: A new daemon binary takes over     │
      │ Doc Ref: internal/session │                           │         without ending pane programs.        │
      └───────────────────────────┘                           │                  Risk: High                  │
                    ┆                                         │              Verification: Test              │
                    ┆                                         └──────────────────────────────────────────────┘
                    ┆                                                             ●   ●    ●
                    ┆                                                             │   │    │
                    ┆                            ┌────────────────────────────────┘   │    └──────────────────────────────────────────────────────┐
                    ┆                            │                                    │                                                           │
               «satisfies»                  «contains»                           «contains»                                                  «contains»
                    ┆                            │                                    │                                                           │
                    └┄┄┄┄┐   ┌───────────────────┘                                    │                                                           │
                         ▼   │                                                        │                                                           │
 ┌──────────────────────────────────────────────────┐      ┌────────────────────────────────────────────────────┐       ┌───────────────────────────────────────────────────┐
 │             «Functional Requirement»             │      │             «Performance Requirement»              │       │              «Interface Requirement»              │
 │                    keep_ptys                     │      │                     short_gap                      │       │                     same_wire                     │
 │                     ID: 1.1                      │      │                      ID: 1.2                       │       │                      ID: 1.3                      │
 │     Text: The old daemon hands every PTY to      │      │    Text: Clients see a gap of less than 200 ms.    │       │    Text: Old clients attach to the new daemon.    │
 │                    the new one.                  │      │                    Risk: Medium                    │       │                     Risk: Low                     │
 │                    Risk: High                    │      │               Verification: Analysis               │       │             Verification: Inspection              │
 │                Verification: Test                │      └────────────────────────────────────────────────────┘       └───────────────────────────────────────────────────┘
 └──────────────────────────────────────────────────┘

173 columns, 36 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

requirementDiagram

  requirement live_upgrade {
    id: 1
    text: A new daemon binary takes over without ending pane programs.
    risk: high
    verifymethod: test
  }

  functionalRequirement keep_ptys {
    id: 1.1
    text: The old daemon hands every PTY to the new one.
    risk: high
    verifymethod: test
  }

  performanceRequirement short_gap {
    id: 1.2
    text: Clients see a gap of less than 200 ms.
    risk: medium
    verifymethod: analysis
  }

  interfaceRequirement same_wire {
    id: 1.3
    text: Old clients attach to the new daemon.
    risk: low
    verifymethod: inspection
  }

  element handoff {
    type: "Go package"
    docref: internal/session
  }

  element e2e {
    type: "E2E test"
    docref: e2e/tui
  }

  live_upgrade - contains -> keep_ptys
  live_upgrade - contains -> short_gap
  live_upgrade - contains -> same_wire
  handoff - satisfies -> keep_ptys
  e2e - verifies -> live_upgrade

C4

  • Keyword: C4Context, C4Container, C4Component, C4Dynamic or C4Deployment.
  • Goldens: 6 of 6 match pele.
  • Text: Drawn as a flowchart is.
  • Known difference: At some widths an edge label writes over a box border or a boundary title. The drawing at 80 columns is clean.
A C4 context diagram of tuios, the developer, a developer on a phone, coding agents, a Git host and other machines, with labelled links
                ╭───────────────────────────────╮
                │           «person»            │
                │           Developer           │
                │  Works in panes and answers   │
                │            agents             │
                ╰───────────────────────────────╯
                                │
                           Types into
                                │
                                ▼
                ┌───────────────────────────────┐
                │           «system»            │
                │             tuios             │
                │  Multiplexer, window manager  │
              ┌►│       and agent cockpit       │─┐
            ┌─┘ └───────────────────────────────┘ └─┐
            │                   │                   │
            │             Runs in panes             │
            │                   │                   │
            │                   ▼                   │
            │   ┌───────────────────────────────┐   │
            │   │       «external system»       │   │
            │   │         Coding agents         │   │
            │   │ Claude Code, Codex and others │   │
            │   └───────────────────────────────┘   │
            │                   │                   │
            │          Pushes branches to         Links to
            │                   │                   │
            │                   ▼                   │
            │   ┌───────────────────────────────┐   │
  Attaches over │       «external system»       │   │
       SSH  │   │           Git host            │   │
            │   │     Pull requests and CI      │   │
            │   └───────────────────────────────┘   │
            │                                       │
            │   ┌───────────────────────────────┐ ┌─┘
            │   │       «external system»       │◄┘
            │   │        Other machines         │
            │   │     Remote tuios daemons      │
            │   └───────────────────────────────┘
            │
            └┐  ╭───────────────────────────────╮
             └──│           «person»            │
                │     Developer on a phone      │
                │    Approves from anywhere     │
                ╰───────────────────────────────╯

58 columns, 46 rows, drawn for 80 columns.

C4Context
  title tuios in its surroundings
  Person(dev, "Developer", "Works in panes and answers agents")
  System(tuios, "tuios", "Multiplexer, window manager and agent cockpit")
  System_Ext(agents, "Coding agents", "Claude Code, Codex and others")
  System_Ext(git, "Git host", "Pull requests and CI")
  System_Ext(hosts, "Other machines", "Remote tuios daemons")
  Person(phone, "Developer on a phone", "Approves from anywhere")

  Rel(dev, tuios, "Types into")
  Rel(phone, tuios, "Attaches over SSH")
  Rel(tuios, agents, "Runs in panes")
  Rel(agents, git, "Pushes branches to")
  Rel(tuios, hosts, "Links to")

Use case

  • Keyword: usecase-beta.
  • Goldens: 24 of 24 match pele.
  • Text: Drawn as a flowchart is.
  • Known difference: The edges of an actor start a few cells to the right of the figure and join into one line. It can be hard to see which actor goes where.
A use case diagram with a developer and a coding agent outside the tuios boundary, their use cases, and an include link
                        ┌─ tuios ─────────────────────────────────────────────────────────────────┐
                        │                                                                         │
                        │      ╭──────────────────────╮                                           │
                   ┌────┼─────►│ Split and tile panes │                                           │
                   │    │      ╰──────────────────────╯                                           │
                   │    │                                                                         │
                   │    │         ╭─────────────────╮                                             │
                   ├────┼────────►│ Start an agent  │                                             │
                   │    │         ╰─────────────────╯                                             │
       o       ────┤    │                                                                         │
      /|\      ────┘    │                                                                         │
      / \      ────┐    │     ╭────────────────────────╮                                          │
   Developer   ────┼────┼────►│   Approve a command    │┄┄┄┄ «include» ┄┄┄┐                       │
                   │    │     ╰────────────────────────╯                  ┆                       │
                   │    │                                                 ┆                       │
                   │    │                                                 ┆ ╭───────────────────╮ │
                   │    │                                                 └►│ Ask for approval  │ │
        o          │    │        ╭──────────────────╮                     ┌►│                   │ │
       /|\       ──┴┬───┼───────►│ Review the diff  │                     │ ╰───────────────────╯ │
       / \       ───┤   │        ╰──────────────────╯                     │                       │
  Coding agent      │   │                                                 │                       │
                    ├───┼─────────────────────────────────────────────────┘                       │
                    │   │                                                                         │
                    │   │        ╭──────────────────╮                                             │
                    └───┼───────►│  Push a branch   │                                             │
                        │        ╰──────────────────╯                                             │
                        └─────────────────────────────────────────────────────────────────────────┘

99 columns, 27 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

usecase-beta
direction LR
actor Dev("Developer")
actor Agent("Coding agent")
systemBoundary tuios["tuios"]
  Split("Split and tile panes")
  Start("Start an agent")
  Approve("Approve a command")
  Review("Review the diff")
  Ask("Ask for approval")
  Push("Push a branch")
end
Dev --> Split
Dev --> Start
Dev --> Approve
Dev --> Review
Agent --> Ask
Agent --> Push
Approve ..> : include Ask

Agent flow

  • Keyword: agentflow-beta.
  • Goldens: 12 of 12 match pele.
  • Text: Drawn as a flowchart is.
  • Known difference: A note link whose name starts with two backslashes is written as pele writes it. The scheme stays https, so the link allowlist holds.
An agent flow from a bug report through a fixer agent with tasks, a tool and a reference document, to a review agent and a pull request
    ┌─────────────────────┐
    │     Bug report      │
    └─────────────────────┘
               │
               ▼
 ┌─ Fixer agent ───────────┐
 │                         │
 │   ╭──────────────────╮  │
 │   │  Reproduce the   │  │
 │   │       bug        │  │
 │   ╰──────────────────╯  │
 │             │           │
 │             ▼           │
 │  ┌────────────────────┐ │
 │  │      go test       │ │
 │  └────────────────────┘ │
 │             │           │
 │             ▼           │
 │   ╭──────────────────╮  │
 │   │  Write the fix   │  │
 │   ╰──────────────────╯  │
 │             ┆           │
 │   ┌───────────────────┐ │
 │   │     AGENTS.md     │ │
 │   └───────────────────┘ │
 └─────────────┬───────────┘
               │
               ▼
  ┌─ Review agent ────────┐
  │                       │
  │  ╭──────────────────╮ │
  │  │  Read the diff   │ │
  │  ╰──────────────────╯ │
  │            │          │
  │            ▼          │
  │   ╱─────────────────╲ │
  │   <  Fix is right?  > │
  │   ╲─────────────────╱ │
  │            │          │
  └────────────┼──────────┘
               │
              yes
               │
               ▼
   ╱──────────────────────╲
   <    Open the pull     >
   │       request        │
   ╲──────────────────────╱

28 columns, 48 rows, drawn for 80 columns.

agentflow-beta TB
  issue["Bug report"]@{ shape: input }

  flow fixer["Fixer agent"]
    repro["Reproduce the bug"]@{ shape: task }
    tests["go test"]@{ shape: tool }
    patch["Write the fix"]@{ shape: task }
    guide["AGENTS.md"]@{ shape: refdoc }
    repro --> tests --> patch
    patch -.- guide
  end

  flow reviewer["Review agent"]
    read["Read the diff"]@{ shape: task }
    ok["Fix is right?"]@{ shape: decision }
    read --> ok
  end

  pr["Open the pull request"]@{ shape: action }
  issue --> fixer
  fixer --> reviewer
  ok -- yes --> pr

Swimlane

  • Keyword: swimlane-beta.
  • Goldens: 13 of 13 match pele.
  • Text: A flowchart with its lanes as bands.
A swimlane diagram with agent, CI and you lanes: the agent pushes a change, CI tests it, and you review and merge it
 ┌─ Agent ──────────────────┐┌─ CI ──────────────────┐┌─ You ─────────────────┐
 │                          ││                       ││                       │
 │   ┌───────────────────┐  ││                       ││                       │
 │   │  Make a worktree  │  ││                       ││                       │
 │   └───────────────────┘  ││                       ││                       │
 │             │            ││                       ││                       │
 │             ▼            ││                       ││                       │
 │   ┌───────────────────┐  ││                       ││                       │
 │┌─►│ Write the change  │◄─┼┼───────────────────────┼┼────────────┐          │
 ││  └───────────────────┘  ││                       ││            │          │
 ││            │            ││                       ││            │          │
 ││            ▼            ││                       ││            │          │
 ││  ┌───────────────────┐  ││                       ││            │          │
 ││  │  Push the branch  │──┼┼───────────┐           ││            │          │
 ││  └───────────────────┘  ││           │           ││            │          │
 ││                         ││           │           ││            │          │
 ││                         ││           ▼           ││            │          │
 ││                         ││  ┌────────────────┐   ││         changes       │
 ││                         ││  │ Run the tests  │   ││            │          │
 ││                         ││  └────────────────┘   ││            │          │
 ││                         ││           │           ││            │          │
 ││                         ││           ▼           ││            │          │
 ││                         ││   ╱──────────────╲    ││            │          │
 │└───────────── no ────────┼┼───<    Green?    >    ││            │          │
 │                          ││   ╲──────────────╱    ││            │          │
 │                          ││           │           ││            │          │
 │                          ││           │           ││   ┌─────────────────┐ │
 │                          ││           └───── yes ─┼┼──►│ Review the diff │ │
 │                          ││                       ││   └─────────────────┘ │
 │                          ││                       ││            │          │
 │                          ││                       ││         approve       │
 │                          ││                       ││            ▼          │
 │                          ││                       ││       ┌─────────┐     │
 │                          ││                       ││       │  Merge  │     │
 │                          ││                       ││       └─────────┘     │
 └──────────────────────────┘└───────────────────────┘└───────────────────────┘

79 columns, 36 rows, drawn for 80 columns.

swimlane-beta LR
  subgraph Agent
    branch[Make a worktree]
    code[Write the change]
    push[Push the branch]
  end

  subgraph CI
    test[Run the tests]
    green{Green?}
  end

  subgraph You
    review[Review the diff]
    merge[Merge]
  end

  branch --> code --> push --> test --> green
  green -->|no| code
  green -->|yes| review
  review -->|changes| code
  review -->|approve| merge

Time and order

Diagrams that run along time, or along the order of events.

Sequence

  • Keyword: sequenceDiagram.
  • Goldens: 38 of 38 match pele.
  • Text: The layout of the SVG, mapped to cells: lifelines run down, and messages run across.
A sequence diagram with numbered messages: you start an agent, the daemon spawns it, and a loop with an optional approval and an alt block for allow or deny, inside two coloured boxes
     ┌─────┐
     │ You │
     └─────┘                  ┌──────────┐             ┌──────────────┐                  ┌────────────┐                 ┌─────────┐
        │                     │  Inbox   │             │    Daemon    │                  │   claude   │                 │   git   │
        │                     └──────────┘             └──────────────┘                  └────────────┘                 └─────────┘
        │                           │                          │                                │                            │
        │             Start an agent in a worktree             │                                │                            │
        │ ──────────────────────────┼─────────────────────────►│                                │                            │
        │                           │                          │                                │                            │
        │                           │                          │      Spawn in a new pane       │                            │
        │                           │                          │──────────────────────────────► │                            │
 ┌ loop [Until the task is done] ───┼──────────────────────────┼────────────────────────────────┼────────────────────────────┼──┐
 │      │                           │                          │                                │                            │  │
 │      │                           │                          │                                │     Read and edit files    │  │
 │      │                           │                          │                                │ ──────────────────────────►│  │
 │ ┌ opt [A risky command] ─────────┼──────────────────────────┼────────────────────────────────┼────┐                       │  │
 │ │    │                           │                          │                                │    │                       │  │
 │ │    │                           │                          │  Ask to run rm -rf build/      │    │                       │  │
 │ │    │                           │                          │◄─────────────────────────────  │    │                       │  │
 │ │    │                           │                          │                                │    │                       │  │
 │ │    │                           │     Add an approval      │                                │    │                       │  │
 │ │    │                           │◄──────────────────────── │                                │    │                       │  │
 │ │    │                           │                          │                                │    │                       │  │
 │ │    │          Notify           │                          │                                │    │                       │  │
 │ │    │◄──────────────────────────│                          │                                │    │                       │  │
 │ │ ┌ alt [You approve] ───────────┼──────────────────────────┼────────────────────────────────┼──┐ │                       │  │
 │ │ │  │                           │                          │                                │  │ │                       │  │
 │ │ │  │         Allow once        │                          │                                │  │ │                       │  │
 │ │ │  │ ─────────────────────────►│                          │                                │  │ │                       │  │
 │ │ │  │                           │                          │                                │  │ │                       │  │
 │ │ │  │                           │                          Allowed                          │  │ │                       │  │
 │ │ │  │                           │┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄► │  │ │                       │  │
 │ │ ├┄ [You refuse] ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┤ │                       │  │
 │ │ │  │                           │                          │                                │  │ │                       │  │
 │ │ │  │      Deny, with a note    │                          │                                │  │ │                       │  │
 │ │ │  │ ─────────────────────────►│                          │                                │  │ │                       │  │
 │ │ │  │                           │                          │                                │  │ │                       │  │
 │ │ │  │                           │                          Denied                           │  │ │                       │  │
 │ │ │  │                           │ ┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┼┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄► │  │ │                       │  │
 │ │ └──┼───────────────────────────┼──────────────────────────┼────────────────────────────────┼──┘ │                       │  │
 │ └────┼───────────────────────────┼──────────────────────────┼────────────────────────────────┼────┘                       │  │
 │      │                           │                          │                                │                            │  │
 └──────┼───────────────────────────┼──────────────────────────┼────────────────────────────────┼────────────────────────────┼──┘
        │                           │                          │                                │                            │
        │                           │                          │                                │           Commit           │
        │                           │                          │                                │ ──────────────────────────►│
        │                           │                          │                                │                            │
        │                           │                          │            Done                │                            │
        │                           │                          │◄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄  │                            │
        │                           │                        ┌─────────────────────────────────────────────────────────────────┐
        │                           │                        │             The worktree keeps the diff for review              │
        │                           │                        └─────────────────────────────────────────────────────────────────┘
        │                           │                          │                                │                            │
        │                    Show the diff                     │                                │                            │
        │◄──────────────────────────┼───────────────────────── │                                │                            │
        │                           │                          │                                │                            │
     ┌─────┐                  ┌──────────┐             ┌──────────────┐                  ┌────────────┐                 ┌─────────┐
     │ You │                  │  Inbox   │             │    Daemon    │                  │   claude   │                 │   git   │
     └─────┘                  └──────────┘             └──────────────┘                  └────────────┘                 └─────────┘

131 columns, 59 rows. No layout fits in 80 columns, so it is drawn at its full width. It shrinks to fit the page. Select Full size to read it at full size.

sequenceDiagram
  autonumber
  box rgba(168,85,247,0.12) You
    actor You
    participant Inbox
  end
  box rgba(59,130,246,0.12) Laptop
    participant Daemon
    participant Agent as claude
    participant Repo as git
  end

  You->>Daemon: Start an agent in a worktree
  Daemon->>+Agent: Spawn in a new pane
  loop Until the task is done
    Agent->>Repo: Read and edit files
    opt A risky command
      Agent->>Daemon: Ask to run rm -rf build/
      Daemon->>Inbox: Add an approval
      Inbox->>You: Notify
      alt You approve
        You->>Inbox: Allow once
        Inbox-->>Agent: Allowed
      else You refuse
        You->>Inbox: Deny, with a note
        Inbox-->>Agent: Denied
      end
    end
  end
  Agent->>Repo: Commit
  Agent-->>-Daemon: Done
  Note over Daemon,Repo: The worktree keeps the diff for review
  Daemon->>You: Show the diff

Gantt

  • Keyword: gantt.
  • Goldens: 11 of 11 match pele.
  • Text: Bars on a date axis.
A gantt chart for tuios 1.0 with design, build and ship sections, tasks, milestones and a date axis
                                   tuios 1.0

Design                 ··┆·      ··┆·      ··┆·      ·┆··      ·┆··      ·┆··
  Agent cockpit      ░░░░░░░░░░  ··┆·      ··┆·      ·┆··      ·┆··      ·┆··
  Plugin API           ··┆·   ░░░░░░░░░░   ··┆·      ·┆··      ·┆··      ·┆··
  Design review        ··┆·      ··┆·  ◆   ··┆·      ·┆··      ·┆··      ·┆··
Build                  ··┆·      ··┆·      ··┆·      ·┆··      ·┆··      ·┆··
  Inbox and replies    ··┆·      ··┆·  ▘▘▘▘▘▘▘▘▘▘▘▘  ·┆··      ·┆··      ·┆··
  Plugin runtime       ··┆·      ··┆·  ▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒     ·┆··      ·┆··
  Live upgrade         ··┆·      ··┆·      ··┆·   ▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚▚     ·┆··
  Phone client         ··┆·      ··┆·      ··┆·      ·┆··█████████████   ·┆··
Ship                   ··┆·      ··┆·      ··┆·      ·┆··      ·┆··      ·┆··
  Freeze               ··┆·      ··┆·      ··┆·      ·┆··      ·┆··◆     ·┆··
  Release candidate    ··┆·      ··┆·      ··┆·      ·┆··      ·┆··▓▓▓▓▓▓▓┆··
  Docs and videos      ··┆·      ··┆·      ··┆·      ·┆··      ·┆··  ██████████
  1.0 release          ··┆·      ··┆·      ··┆·      ·┆··      ·┆··      ·┆·◆
                     ────┼─────────┼─────────┼────────┼─────────┼─────────┼────
                      Oct 04    Oct 11    Oct 18   Oct 25    Nov 01    Nov 08

█ task  ▒ active  ░ done  ▓ critical  ▚ critical, active  ▘ critical, done
◆ milestone  · excluded

79 columns, 21 rows, drawn for 80 columns.

gantt
  title tuios 1.0
  dateFormat YYYY-MM-DD
  axisFormat %b %d
  tickInterval 1week
  excludes weekends
  todayMarker off

  section Design
    Agent cockpit       :done, d1, 2026-10-01, 5d
    Plugin API          :done, d2, after d1, 4d
    Design review       :milestone, m1, after d2, 0d

  section Build
    Inbox and replies   :crit, done, b1, after d2, 6d
    Plugin runtime      :active, b2, after d2, 9d
    Live upgrade        :crit, active, b3, after b1, 8d
    Phone client        :b4, after b2, 6d

  section Ship
    Freeze              :milestone, m2, after b3, 0d
    Release candidate   :crit, s1, after b3, 4d
    Docs and videos     :s2, after b4, 5d
    1.0 release         :milestone, m3, after s1, 0d

Timeline

  • Keyword: timeline.
  • Goldens: 14 of 14 match pele.
  • Text: It runs across, and runs down when it does not fit the columns.
A timeline of a release week from Monday to Friday, in freeze, check and ship sections, with tasks under each day
             A release week

┌──────────────────────────────────────┐
│ Freeze                               │
└──────────────────────────────────────┘

┌───────────┐
│ Monday    ├─┬─ Cut the release branch
└───────────┘ └─ Move the library pins

┌───────────┐
│ Tuesday   ├─┬─ Run the full E2E suite
└───────────┘ └─ Fuzz overnight

┌──────────────────────────────────────┐
│ Check                                │
└──────────────────────────────────────┘

┌───────────┐
│ Wednesday ├─── Fix what the fuzzer
└───────────┘    found

┌───────────┐
│ Thursday  ├─┬─ Release candidate on
└───────────┘ │  every platform
              └─ Write the release notes

┌──────────────────────────────────────┐
│ Ship                                 │
└──────────────────────────────────────┘

┌───────────┐
│ Friday    ├─┬─ Tag the release
└───────────┘ ├─ Homebrew, AUR and
              │  Docker
              └─ Post the clips

40 columns, 36 rows, drawn for 80 columns.

timeline
  title A release week
  section Freeze
    Monday : Cut the release branch
           : Move the library pins
    Tuesday : Run the full E2E suite
            : Fuzz overnight
  section Check
    Wednesday : Fix what the fuzzer found
    Thursday : Release candidate on every platform
             : Write the release notes
  section Ship
    Friday : Tag the release
           : Homebrew, AUR and Docker
           : Post the clips

User journey

  • Keyword: journey.
  • Goldens: 1 of 1 match pele.
  • Text: It runs across, and runs down when it does not fit the columns.
A user journey of a first hour with tuios, with a score face for each step and a dip while you wait for an approval
  Your first hour with tuios

┌────────────────────────────┐
│ Install                    │
└────────────────────────────┘
┌──────────────────────┐
│ Run the install      │ ●●●●●
│ script               │
│ You                  │
└──────────────────────┘
┌────────────────────────────┐
│ Panes                      │
└────────────────────────────┘
┌──────────────────────┐
│ Split and tile panes │ ●●●●●
│ You                  │
└──────────────────────┘
┌──────────────────────┐
│ Learn the leader     │ ●●●○○
│ key                  │
│ You                  │
└──────────────────────┘
┌────────────────────────────┐
│ Agents                     │
└────────────────────────────┘
┌──────────────────────┐
│ Start an agent       │ ●●●●●
│ You, Agent           │
└──────────────────────┘
┌──────────────────────┐
│ Wait for an          │ ●●○○○
│ approval             │
│ You, Agent           │
└──────────────────────┘
┌──────────────────────┐
│ Approve from the     │ ●●●●●
│ Inbox                │
│ You, Agent           │
└──────────────────────┘
┌────────────────────────────┐
│ Away                       │
└────────────────────────────┘
┌──────────────────────┐
│ Detach and close     │ ●●●●○
│ the laptop           │
│ You                  │
└──────────────────────┘
┌──────────────────────┐
│ Attach from the      │ ●●●●●
│ phone                │
│ You, Agent           │
└──────────────────────┘

30 columns, 52 rows, drawn for 80 columns.

journey
  title Your first hour with tuios
  section Install
    Run the install script: 5: You
  section Panes
    Split and tile panes: 5: You
    Learn the leader key: 3: You
  section Agents
    Start an agent: 5: You, Agent
    Wait for an approval: 2: You, Agent
    Approve from the Inbox: 5: You, Agent
  section Away
    Detach and close the laptop: 4: You
    Attach from the phone: 5: You, Agent

Git graph

  • Keyword: gitGraph.
  • Goldens: 35 of 35 match pele.
  • Text: It runs down, one row for each commit, with the oldest commit at the top.
A git graph with main, a feature branch and a fix branch, commits, two merges and tags for two releases
┌┄main
┆ ┌┄feat/inbox
┆ ┆ ┌┄fix/attach-race
● ┆ ┆  v0.8.0 [v0.8.0]
● ┆ ┆  fix scrollback
├─● ┆  inbox model
┆ ● ┆  reply composer
├─┼─■  fix the race
○─┼─┤
┆ ● ┆  paste chips
○─┤ ┆
● ┆ ┆  release notes
● ┆ ┆  v0.9.0 [v0.9.0]
┆ ┆ ┆

22 columns, 14 rows, drawn for 80 columns.

gitGraph
  commit id: "v0.8.0" tag: "v0.8.0"
  commit id: "fix scrollback"
  branch feat/inbox
  checkout feat/inbox
  commit id: "inbox model"
  commit id: "reply composer"
  checkout main
  branch fix/attach-race
  checkout fix/attach-race
  commit id: "fix the race" type: HIGHLIGHT
  checkout main
  merge fix/attach-race
  checkout feat/inbox
  commit id: "paste chips"
  checkout main
  merge feat/inbox
  commit id: "release notes"
  commit id: "v0.9.0" tag: "v0.9.0"

Event model

  • Keyword: eventmodeling.
  • Goldens: 12 of 12 match pele.
  • Text: Swimlanes in time order, or a list of frames when it is narrow.
An event model of an approval: UI, command and event rows from an agent pane through the Inbox to a tool that ran
UI/Automation
┌ 01 ───────┐
│ AgentPane │
└───────────┘
  ▼
Command/Read Model
┌ 02 ─────────────┐
│ RunTool         │
│ command: string │
└─────────────────┘
  ▼
Events
┌ 03 ───────────┐
│ ApprovalAsked │
│ tool: string  │
└───────────────┘
  ▼
Command/Read Model
┌ 04 ───┐
│ Inbox │
└───────┘
  ▼
UI/Automation
┌ 05 ────────┐
│ InboxPanel │
└────────────┘
  ▼
Command/Read Model
┌ 06 ─────────┐
│ Approve     │
│ allow: bool │
└─────────────┘
  ▼
Events
┌ 07 ─────────────┐
│ ApprovalGranted │
│ by: string      │
└─────────────────┘
  ▼
UI/Automation
┌ 08 ──────────┐
│ AgentResumer │
└──────────────┘
  ▼
Events
┌ 09 ───────┐
│ ToolRan   │
│ exit: int │
└───────────┘

19 columns, 49 rows, drawn for 80 columns.

eventmodeling

tf 01 ui AgentPane
tf 02 cmd RunTool { command: string }
tf 03 evt ApprovalAsked { tool: string }
tf 04 rmo Inbox ->> 03
tf 05 ui InboxPanel
tf 06 cmd Approve { allow: bool }
tf 07 evt ApprovalGranted { by: string }
tf 08 pcr AgentResumer
tf 09 evt ToolRan { exit: int }

Charts

Numbers drawn as shapes. In text, most charts become bars, grids or tables.

Pie

  • Keyword: pie. showData shows the values.
  • Goldens: 2 of 2 match pele.
  • Text: One bar for each slice, with its percentage and value. As in pele, a slice under 1% is left out of the pie.
A pie chart titled where a week of CI minutes goes, with eight slices and a legend
                  Where a week of CI minutes goes

E2E suite        ████████████████████████████████████████  32%  412
Ghostty backend  ██████████████████████▉                   18%  236
Unit tests       ██████████████████▎                       15%  188
Fuzz, nightly    ███████████████▉                          13%  164
Release builds   ███████████▊                               9%  121
WebAssembly      ███████▏                                   6%   74
Lint and vet     █████                                      4%   52
Docs site        ███▊                                       3%   38

67 columns, 10 rows, drawn for 80 columns.

pie showData
  title Where a week of CI minutes goes
  "E2E suite" : 412
  "Ghostty backend" : 236
  "Unit tests" : 188
  "Fuzz, nightly" : 164
  "Release builds" : 121
  "WebAssembly" : 74
  "Lint and vet" : 52
  "Docs site" : 38

XY chart

  • Keyword: xychart or xychart-beta.
  • Goldens: 8 of 8 match pele.
  • Text: Bars and lines drawn with plot. Categories turn into rows when they do not fit across. Point labels and bar values go where they cover nothing.
An XY chart of idle wakeups per minute by release, with bars and a line that fall from v0.4 to v0.9
           Idle CPU of a session, by release

Wakeups per minute
1400 ┐
     │
1200 ┤ ██████⡀
     │ ██████⠈⠒⠤⣀
1000 ┤ ██████  ▅▅▅▅▅▅
     │ ██████  ██████⢄
 800 ┤ ██████  ██████ ⠑⠤⡀
     │ ██████  ██████  ▁▁▁▁▁▁
 600 ┤ ██████  ██████  ██████⣀
     │ ██████  ██████  ██████ ⠑⠢⣀
 400 ┤ ██████  ██████  ██████  ▃▃▃▃▃▃
     │ ██████  ██████  ██████  ██████⠒⠤⣀
 200 ┤ ██████  ██████  ██████  ██████  ▂▂▂▂▂▂⣀
     │ ██████  ██████  ██████  ██████  ██████ ⠉▄▄▄▄▄▄
   0 ┴────┬───────┬───────┬───────┬───────┬───────┬───
        v0.4    v0.5    v0.6    v0.7    v0.8    v0.9

54 columns, 19 rows, drawn for 80 columns.

xychart
  title "Idle CPU of a session, by release"
  x-axis [v0.4, v0.5, v0.6, v0.7, v0.8, v0.9]
  y-axis "Wakeups per minute" 0 --> 1400
  bar [1200, 960, 610, 340, 120, 45]
  line [1200, 960, 610, 340, 120, 45]

Quadrant chart

  • Keyword: quadrantChart.
  • Goldens: 3 of 3 match pele.
  • Text: A box in four parts, with the points as dots.
A quadrant chart that sorts eight bugs by how common and how harmful they are, into fix now, plan a fix, quick win and leave it
                             Which bug to fix first

           ┌─────────────────────────────────┬─────────────────────────────────┐
           │ Plan a fix                      │                         Fix now │
           │                                 │                                 │
           │                       ● Lost scrollback on upgrade                │
Large harm │                                 │                                 │
           │          ● Dead pane on resize  │                                 │
           │                                 │        Slow first frame ●       │
           │                                 │                                 │
           │                                 │ Flaky attach test ●             │
           ├─────────────────────────────────┼─────────────────────────────────┤
           │                                 │                                 │
           │                                 │          ● Mouse drag in nvim   │
           │                                 │                                 │
Small harm │                                 │            ● Wrong glyph width  │
           │                                 │                                 │
           │                 ● Theme flicker │                                 │
           │                                 │      ● Typo in help             │
           │ Leave it                        │                       Quick win │
           └─────────────────────────────────┴─────────────────────────────────┘
                          Rare                             Common

80 columns, 22 rows, drawn for 80 columns.

quadrantChart
  title Which bug to fix first
  x-axis Rare --> Common
  y-axis Small harm --> Large harm
  quadrant-1 Fix now
  quadrant-2 Plan a fix
  quadrant-3 Leave it
  quadrant-4 Quick win
  Lost scrollback on upgrade: [0.35, 0.9]
  Flaky attach test: [0.8, 0.55]
  Wrong glyph width: [0.7, 0.25]
  Slow first frame: [0.9, 0.7]
  Mouse drag in nvim: [0.66, 0.38]
  Theme flicker: [0.25, 0.15]
  Dead pane on resize: [0.15, 0.75]
  Typo in help: [0.6, 0.08]

Sankey

  • Keyword: sankey or sankey-beta.
  • Goldens: 8 of 8 match pele.
  • Text: Columns of boxes joined by lines. When two lines would join, when lines cross more than three times, or when the columns do not fit, it is a table of flows: source, target and value.
A sankey diagram of where key presses go: to the shell, an agent or the leader key, and then to pane redraws, the Inbox, layout changes and copy mode
                        ┌────────────┐         ┌───────────────┐
                   ┌───▶│ Shell      ├─47─────▶│ Pane redraw   │
                   │    │ 47         │    ┌───▶│ 77            │
┌─────────────┐    │    └────────────┘    │    └───────────────┘
│ Key presses ├─47─┘                      │
│ 100         ├─35───┐                    │
│             ├─18──┐│                    │
└─────────────┘     ││                    │
                    ││  ┌────────────┐    │
                    │└─▶│ Agent      ├─30─┘    ┌───────────────┐
                    │   │ 35         ├─5──────▶│ Inbox         │
                    │   └────────────┘         │ 5             │
                    │                          └───────────────┘
                    │
                    │                          ┌───────────────┐
                    │   ┌────────────┐     ┌──▶│ Layout change │
                    └──▶│ Leader key ├─11──┘   │ 11            │
                        │ 18         ├─7────┐  └───────────────┘
                        └────────────┘      │
                                            │  ┌───────────────┐
                                            └─▶│ Copy mode     │
                                               │ 7             │
                                               └───────────────┘

64 columns, 23 rows, drawn for 80 columns.

sankey

Key presses,Shell,47
Key presses,Agent,35
Key presses,Leader key,18
Shell,Pane redraw,47
Agent,Pane redraw,30
Agent,Inbox,5
Leader key,Layout change,11
Leader key,Copy mode,7

Radar

  • Keyword: radar-beta.
  • Goldens: 3 of 3 match pele.
  • Text: A table with one bar for each curve on each axis.
A radar chart that compares the health of two releases on six axes, such as idle CPU, memory and docs
            Release health
from 0 to 5
Idle CPU
  v0.8 ██████████████████············ 3
  v0.9 ██████████████████████████████ 5
Memory
  v0.8 ██████████████████············ 3
  v0.9 ████████████████████████······ 4
Startup
  v0.8 ████████████████████████······ 4
  v0.9 ████████████████████████······ 4
Binary size
  v0.8 ██████████████████············ 3
  v0.9 ████████████·················· 2
E2E cover
  v0.8 ████████████·················· 2
  v0.9 ████████████████████████······ 4
Docs
  v0.8 ██████████████████············ 3
  v0.9 ████████████████████████······ 4

39 columns, 20 rows, drawn for 80 columns.

radar-beta
  title Release health
  axis cpu["Idle CPU"], mem["Memory"], start["Startup"]
  axis size["Binary size"], tests["E2E cover"], docs["Docs"]
  curve old["v0.8"]{3, 3, 4, 3, 2, 3}
  curve new["v0.9"]{5, 4, 4, 2, 4, 4}
  max 5
  graticule polygon

Treemap

  • Keyword: treemap-beta, or treemap.
  • Goldens: 8 of 8 match pele.
  • Text: Nested boxes, or an indented tree when the boxes are too small.
A treemap of the lines of Go in tuios, with nested boxes for the window manager, the daemon and CLI, and the libraries
tuios, thousands of lines of Go  407
├ Window manager  186
│ ├ internal/app  145
│ ├ internal/config  26
│ └ internal/input  15
├ Daemon and CLI  144
│ ├ internal/session  105
│ └ cmd/tuios  39
└ Libraries  77
  ├ sketch  37
  ├ vt  27
  ├ tml  7
  └ loom  6

36 columns, 13 rows, drawn for 80 columns.

treemap-beta
"tuios, thousands of lines of Go"
    "Window manager"
        "internal/app": 145
        "internal/config": 26
        "internal/input": 15
    "Daemon and CLI"
        "internal/session": 105
        "cmd/tuios": 39
    "Libraries"
        "sketch": 37
        "vt": 27
        "tml": 7
        "loom": 6

Venn

  • Keyword: venn-beta.
  • Goldens: 8 of 8 match pele.
  • Text: A table of the sets and their overlaps.
A Venn diagram of three sets, multiplexer, window manager and agent cockpit, with tuios where all three overlap
What tuios is
Sets                                    Size
  mux                 Multiplexer         10
  wm                  Window manager      10
  cockpit             Agent cockpit       10
Overlaps                                Size
  mux ∩ wm            Tiling panes       2.5
  cockpit ∩ wm        Agent rail         2.5
  cockpit ∩ mux       Detached agents    2.5
  cockpit ∩ mux ∩ wm  tuios            1.111

44 columns, 10 rows, drawn for 80 columns.

venn-beta
  title What tuios is
  set mux["Multiplexer"]
  set wm["Window manager"]
  set cockpit["Agent cockpit"]
  union mux,wm["Tiling panes"]
  union wm,cockpit["Agent rail"]
  union mux,cockpit["Detached agents"]
  union mux,wm,cockpit["tuios"]

Packet

  • Keyword: packet or packet-beta.
  • Goldens: 4 of 4 match pele.
  • Text: Rows of bit fields.
  • Known difference: At 40 columns, one-bit fields draw as empty columns, and a long label can break inside a word. At 80 columns a one-bit label reads down, one letter a row.
A packet diagram of a tagged tuios wire frame: length, message type, codec, request id and payload, in rows of 32 bits
0                                                              31
┌───────────────────────────────────────────────────────────────┐
│                Length of the rest of the frame                │
└───────────────────────────────────────────────────────────────┘
32             39              47                              63
┌───────────────┬───────────────┬───────────────────────────────┐
│ Message type  │     Codec     │          Request id           │
└───────────────┴───────────────┴───────────────────────────────┘
64                                                             95
┌───────────────────────────────────────────────────────────────┐
│                          Request id                           │
└───────────────────────────────────────────────────────────────┘
96                            111                             127
┌───────────────────────────────┬───────────────────────────────┐
│          Request id           │          gob payload          │
└───────────────────────────────┴───────────────────────────────┘

                    A tagged tuios wire frame

65 columns, 18 rows, drawn for 80 columns.

packet
  title A tagged tuios wire frame
  0-31: "Length of the rest of the frame"
  32-39: "Message type"
  40-47: "Codec"
  48-111: "Request id"
  112-127: "gob payload"

Trees, boards and maps

Outlines, boards and two-axis maps.

Mindmap

  • Keyword: mindmap.
  • Goldens: 13 of 13 match pele.
  • Text: A tree.
A mindmap with tuios in the middle and branches for hosts, libraries, themes, panes and agents
((tuios))
├── Panes
│   ├── Tiling
│   │   ├── Master and stack
│   │   └── Grid
│   ├── Floating
│   └── Copy mode
│       ├── Vim motions
│       └── Search
├── Agents
│   ├── Harnesses
│   │   ├── Claude Code
│   │   └── Codex
│   ├── Inbox
│   │   ├── Approvals
│   │   └── Replies
│   └── ))Checkpoints((
├── Hosts
│   ├── [Laptop]
│   ├── )Build server(
│   └── {{Phone}}
│       └── Collie
├── Libraries
│   ├── vt
│   │   ├── Pure Go
│   │   └── libghostty
│   ├── sketch
│   │   ├── Mermaid
│   │   └── SVG and PNG
│   ├── plot
│   └── loom
└── Themes
    ├── Catppuccin
    ├── Nord
    └── Omarchy

28 columns, 35 rows, drawn for 80 columns.

mindmap
  root((tuios))
    Panes
      Tiling
        Master and stack
        Grid
      Floating
      Copy mode
        Vim motions
        Search
    Agents
      Harnesses
        Claude Code
        Codex
      Inbox
        Approvals
        Replies
      ))Checkpoints((
    Hosts
      [Laptop]
      )Build server(
      {{Phone}}
        Collie
    Libraries
      vt
        Pure Go
        libghostty
      sketch
        Mermaid
        SVG and PNG
      plot
      loom
    Themes
      Catppuccin
      Nord
      Omarchy

Tree view

  • Keyword: treeView-beta.
  • Goldens: 13 of 13 match pele.
  • Text: Drawn as the tree command draws a folder.
  • Known difference: A very long file name at 40 columns makes the drawing fall back to its own width.
A tree view of the folders and files at the top of the tuios repository
tuios/
├── cmd/
│   ├── tuios/
│   ├── tuios-web/
│   └── tuios-wasm/
├── internal/
│   ├── app/
│   ├── session/
│   ├── input/
│   └── terminal/
├── vt/
├── sketch/
│   ├── raster/
│   └── text/
├── docs/
├── go.mod
├── go.work
└── AGENTS.md

19 columns, 18 rows, drawn for 80 columns.

treeView-beta
    tuios/
        cmd/
            tuios/
            tuios-web/
            tuios-wasm/
        internal/
            app/
            session/
            input/
            terminal/
        vt/
        sketch/
            raster/
            text/
        docs/
        go.mod
        go.work
        AGENTS.md

Ishikawa

  • Keyword: ishikawa-beta, or ishikawa.
  • Goldens: 1 of 1 match pele.
  • Text: A spine with the causes as bones, or an indented tree when it is narrow.
An Ishikawa diagram of the causes of a flaky E2E test, on timing, machine, test, code and terminal branches
Flaky E2E test
├ Timing
│ ├ Fixed sleeps
│ └ Reply hook race
├ Machine
│ ├ Busy CI runner
│ └ Slow disk
├ Test
│ ├ Shared HOME
│ └ Leftover daemon
├ Code
│ ├ Unbuffered channel
│ └ Missing condition wait
└ Terminal
  ├ Wrong TERM
  └ Small window

26 columns, 16 rows, drawn for 80 columns.

ishikawa-beta
    Flaky E2E test
    Timing
        Fixed sleeps
        Reply hook race
    Machine
        Busy CI runner
        Slow disk
    Test
        Shared HOME
        Leftover daemon
    Code
        Unbuffered channel
        Missing condition wait
    Terminal
        Wrong TERM
        Small window

Kanban

  • Keyword: kanban.
  • Goldens: 3 of 3 match pele.
  • Text: Columns side by side, in more rows when they do not fit.
A kanban board with to do, in progress, in review and done columns, with cards and the agents assigned to them
┌────────────────────────┐ ┌─────────────────────────┐
│ To do (2)              │ │ In progress (2)         │
│                        │ │                         │
│ ┌────────────────────┐ │ │ ┌─────────────────────┐ │
│ │ Plugin registry    │ │ │ │ Live daemon upgrade │ │
│ │ Low                │ │ │ │ claude · Very High  │ │
│ └────────────────────┘ │ │ └─────────────────────┘ │
│ ┌────────────────────┐ │ │ ┌─────────────────────┐ │
│ │ Sixel in copy mode │ │ │ │ Phone client        │ │
│ │ Very Low           │ │ │ │ codex · High        │ │
│ └────────────────────┘ │ │ └─────────────────────┘ │
└────────────────────────┘ └─────────────────────────┘

┌──────────────────────────┐ ┌─────────────────────────┐
│ In review (1)            │ │ Done (2)                │
│                          │ │                         │
│ ┌──────────────────────┐ │ │ ┌─────────────────────┐ │
│ │ Inbox reply composer │ │ │ │ Sketch draws sankey │ │
│ │ claude               │ │ │ │ diagrams            │ │
│ └──────────────────────┘ │ │ └─────────────────────┘ │
│                          │ │ ┌─────────────────────┐ │
│                          │ │ │ Omarchy themes      │ │
│                          │ │ └─────────────────────┘ │
└──────────────────────────┘ └─────────────────────────┘

56 columns, 24 rows, drawn for 80 columns.

kanban
  todo[To do]
    t1[Plugin registry]@{ priority: 'Low' }
    t2[Sixel in copy mode]@{ priority: 'Very Low' }
  doing[In progress]
    t3[Live daemon upgrade]@{ assigned: 'claude', priority: 'Very High' }
    t4[Phone client]@{ assigned: 'codex', priority: 'High' }
  review[In review]
    t5[Inbox reply composer]@{ assigned: 'claude' }
  done[Done]
    t6[Sketch draws sankey diagrams]
    t7[Omarchy themes]

Cynefin

  • Keyword: cynefin-beta.
  • Goldens: 3 of 3 match pele.
  • Text: A grid of the four domains.
A Cynefin diagram that puts kinds of work on tuios into the clear, complicated, complex and chaotic domains, with arrows between them
                    Kinds of work on tuios
┌──────────────────────────────┬──────────────────────────────┐
│ Complex                      │ Complicated                  │
│ Probe → Sense → Respond      │ Sense → Analyse → Respond    │
│ Emergent Practices           │ Good Practices               │
│ • Design the agent cockpit   │ • Port a Mermaid renderer    │
│                              │ • Speed up the VT parser     │
│                        ┌─────┴─────┐                        │
│                        │ Confusion │                        │
├────────────────────────┤ Disorder  ├────────────────────────┤
│                        └─────┬─────┘                        │
│                              ┃                              │
│ Chaotic                      ┃ Clear                        │
│ Act → Sense → Respond        ┃ Sense → Categorise → Respond │
│ Novel Practices              ┃ Best Practices               │
│ • Release broke on Windows   ┃ • Move a library pin         │
│                              ┃ • Fix a typo in help         │
└──────────────────────────────┻──────────────────────────────┘

Chaotic → Complex: Stabilized
Complex → Complicated: Pattern found
Complicated → Clear: Written down

63 columns, 22 rows, drawn for 80 columns.

cynefin-beta
  title Kinds of work on tuios

  clear
    "Move a library pin"
    "Fix a typo in help"

  complicated
    "Port a Mermaid renderer"
    "Speed up the VT parser"

  complex
    "Design the agent cockpit"

  chaotic
    "Release broke on Windows"

  chaotic --> complex : "Stabilized"
  complex --> complicated : "Pattern found"
  complicated --> clear : "Written down"

Wardley map

  • Keyword: wardley-beta.
  • Goldens: 19 of 19 match pele.
  • Text: A grid of visibility by evolution, or a table when it is narrow.
  • Known difference: When labels crowd, a label can move away from its dot. At 40 columns a dot can hide under another label.
A Wardley map of the tuios value chain from the developer down to the PTY, placed by visibility and evolution
                               tuios value chain
↑ Visibility
 │                   ┆                  ┆                  ┆
 │                   ┆                  ┆·······◆ Developer┆
 │                   ┆     ··············      ·           ┆
 │   Agent cockpit ●┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄○  ┆     ·            ┆
 │                   ··                 ┆     ·            ┆
 │                   ┆ ···              ┆    ● Window manager
 │                   ┆   ···            ┆  ··              ┆
 │                   ┆     ····         ┆ ·                ┆
 │                   ┆       ·●·Coding agents              ┆
 │                   ┆            ··  ··┆                  ┆
 │                   ┆              ·●·Session daemon      ┆
 │                   ┆                  ·······            ┆
 │                   ┆                  ┆     ··●·VT emulator
 │                   ┆                  ┆          ··········
 │                   ┆                  ┆                ··········
 │                   ┆                  ┆                  ┆  ········● SSH
 │                   ┆                  ┆                  ┆       ······
 │                   ┆                  ┆                  ┆             ··● PTY
 │                   ┆                  ┆                  ┆
 └──────────────────────────────────────────────────────────────────────────────
        Genesis            Custom             Product           Commodity
                                                                     Evolution →

80 columns, 24 rows, drawn for 80 columns.

wardley-beta
title tuios value chain

evolution Genesis@0.25 -> Custom@0.5 -> Product@0.75 -> Commodity@1.0

anchor Developer [0.95, 0.6]

component "Agent cockpit" [0.82, 0.22] (build)
component "Window manager" [0.72, 0.56] (build)
component "Coding agents" [0.58, 0.36] (buy)
component "Session daemon" [0.5, 0.45] (build)
component "VT emulator" [0.35, 0.6] (build)
component "SSH" [0.2, 0.88] (buy)
component "PTY" [0.12, 0.95] (market)

Developer -> "Agent cockpit"
Developer -> "Window manager"
"Agent cockpit" -> "Coding agents"
"Agent cockpit" -> "Session daemon"
"Window manager" -> "Session daemon"
"Session daemon" -> "VT emulator"
"Session daemon" -> "SSH"
"VT emulator" -> "PTY"

evolve "Agent cockpit" 0.45

Railroad

  • Keyword: railroad-ebnf-beta, railroad-abnf-beta, railroad-peg-beta or railroad-beta.
  • Goldens: 14 of 14 match pele.
  • Text: The tracks in cells, or the rules as EBNF text when they do not fit.
A railroad diagram of the agent selector grammar: terms, keys, values and the separators between them
                     Agent selector

selector
             ┌───────────────────────┐
  ┌──────┐   │  ┌───────┐  ┌──────┐  │
●─┤ term ├───┴─┬┤ space ├──┤ term ├┬─┴──●
  └──────┘     │└───────┘  └──────┘│
               └─────────◀─────────┘

term
                              ┌────────────────────┐
  ┌─────┐  ╭───╮  ┌───────┐   │  ╭───╮  ┌───────┐  │
●─┤ key ├──┤ : ├──┤ value ├───┴─┬┤ , ├──┤ value ├┬─┴──●
  └─────┘  ╰───╯  └───────┘     │╰───╯  └───────┘│
                                └────────◀───────┘

key
    ╭─────────╮
●──┬┤ harness ├┬──●
   │╰─────────╯│
   │╭───────╮  │
   ├┤ state ├──┤
   │╰───────╯  │
   │╭───────╮  │
   ├┤ needs ├──┤
   │╰───────╯  │
   │╭─────────╮│
   ├┤ session ├┤
   │╰─────────╯│
   │╭───────╮  │
   ├┤ group ├──┤
   │╰───────╯  │
   │╭──────╮   │
   ├┤ host ├───┤
   │╰──────╯   │
   │╭──────╮   │
   ├┤ name ├───┤
   │╰──────╯   │
   │╭─────╮    │
   └┤ cwd ├────┘
    ╰─────╯

value
    ┌──────┐
●──┬┤ glob ├┬──●
   │└──────┘│
   │╭─────╮ │
   └┤ you ├─┘
    ╰─────╯

55 columns, 49 rows, drawn for 80 columns.

railroad-ebnf-beta
title "Agent selector"

selector = term ( space term )* ;
term = key ":" value ( "," value )* ;
key = "harness" | "state" | "needs" | "session" | "group" | "host" | "name" | "cwd" ;
value = glob | "you" ;

On this page