Flowmark reference
The complete Flowmark syntax, exactly as the assistant and connected AI apps get it.
This is the reference the in-app assistant has in its instructions and connected AI apps get from lookup_guidance with the topic flowmark. For a walk-through, start at What is Flowmark and the syntax pages.
Flowmark syntax (what write_diagram takes and get_diagram returns)
process <name>
lanes <Lane A> | <Lane B> optional, fixes lane order
lane <name> following nodes go in this lane
pool <name> [(below)] an outside party (customer, supplier, bank) drawn as a black-box pool above the process, or below it
<kind>[:<event>[(<arg>)]] <name> [#id]
kinds: start end catch throw task user service manual script rule send receive call sub xor and or eventgw
events: message timer error signal conditional escalation terminate compensation; timer args are ISO 8601 (P2D, PT4H, R/P1W)
Indented lines under a node:
<label> [<condition>] (default) -> <target> explicit flow; label, condition and (default) are optional
on:<event>(<arg>) <name> -> <target> interrupting boundary event (on~ for non-interrupting)
doc: <text> documentation: the longer description, hidden on the diagram; repeat for more lines
note: <text> a short note shown beside the node on the diagram (an SLA, a system, "manual for now"); repeat for more lines
=> <pool>: <message> the node sends a message to an outside pool
<= <pool>: <message> the node receives a message from an outside pool
A doc: line before the first node documents the process.
Inside a paragraph each node connects to the node on the line above it. A blank line starts a new paragraph (a new path).
A node with explicit "->" lines does not continue to the next line, and end events never do.
Targets are node names (case-insensitive) or #id; give a node an #id when its name is not unique or it has no name (e.g. merge gateways: "xor #merge").
// starts a comment when it begins the line or follows a space (links like https://… are kept).
get_diagram prints every node with its #id. Keep those ids when you rewrite a diagram, so the user's references stay stable.Example
The reference ends with this example.
process Purchase request
pool Supplier (below)
lanes Employee | Manager | Procurement
lane Employee
start Need identified
user Submit purchase request
lane Manager
xor #resubmitted
user Review request
note: SLA 2 working days
on~timer(P2D) Review pending two days -> Send reminder
xor Request approved?
yes -> Send purchase order
needs changes -> Revise request
no (default) -> Notify rejection
lane Procurement
send Send purchase order
=> Supplier: Purchase order
end Order placed
lane Employee
user Revise request
-> #resubmitted
lane Manager
send Notify rejection
end Request rejected
send Send reminder
end Reminder sent