You define the logic of a Cannoli using [[Nodes]] and [[Arrows]] (and [[Groups]], but we'll get to those later). Nodes are where content is read, written, or sent to the LLM, and arrows are how we pass content and LLM responses to other nodes.
Nodes can have text in them, and arrows can be labeled. Both nodes and arrows can be given one of several colors, which define their type.
![[Pasted image 20240718112523.png]]
Cannolis must be Directed Acyclic Graphs (DAGs), which just means the flow can't loop back in on itself. Aside from this rule, cannolis can be structured any way you like. There can be multiple starting nodes and multiple branches that don't necessarily have to be connected.
![[Pasted image 20240718112209.png]]
You can run a cannoli in a variety of ways. In Obsidian, the easiest is the Cannoli icon button on the left ribbon in Obsidian, or the "Start/stop cannoli" command. For more on running cannolis, check out [[Running cannolis]].
[[Setup]] ← | → [[Hello world]]