From the discussion [1]: "A duct is akin to a first-class call stack".
For a more detailed explanation, you can look up the type definition [2] in Arvo (Urbit's Kernel) and here [3] you can find an example of how the stack looks when setting up a timer.
[1] https://urbit.org/blog/precepts-discussion/