Agentic

L3 Flow

L3: one journey end to end, including how it exits.

Agentic — L3 Flow: rendered example
Rendered by Gnomon from the source below. No edits.

The source

61 lines of PlantUML, and pulls in Agentic notation. Copy it, or open the template inside Gnomon and render it as it is.

@startuml
!include <agentic/core>

title Order refund — L3 Flow

' VIEWPOINT: Flow — what happens step by step, and where does it branch?
'
' THE FLOW IS ONE AGENT'S OWN LOOP, so its steps sit at the top level. A
' SubAgent appearing in it is a CALL, not a boundary drawn round some steps: it
' has its own context window, and the caller neither sees nor orders what
' happens inside. So what sits in a sub-agent's braces is CAPABILITY — what it
' can reach for — and none of it is wired to anything. Put a sequence in there
' and you have drawn a Zone in an agent's colour, claiming an order no runtime
' guarantees. A Zone is the element for that, and it is the only one.
'
' Rel_Expr is a deterministic guard, Rel_LLM is the model's judgement.
'
' Whether reaching a tool RUNS the call is not something you type — it follows
' from where the tool sits. A tool in the flow is reached, so the call happens;
' a tool folded into a capability strip has no position, so nothing guarantees
' it. The renderer reads that off the diagram.
' DONE WHEN: every branch carries a typed guard, and nothing inside a sub-agent
' is connected to anything.

Channel(entry, "Handoff from triage", "api · carries order_id, verified_customer, intent")

' ── the loop's own steps ──────────────────────────────────────────────────
' Say is prompted — the model writes the words. Say_Explicit is fixed text,
' emitted verbatim: the AI disclosure has to be the sentence legal approved,
' not a fresh paraphrase of it each call.
Say_Explicit(welcome, "Welcome + AI disclosure")
Tool(verify, "Look up the order", "OrderLookup v1.0.0")
State(idcheck, "Identity check", "writes customer_verified")
Say_Explicit(confirm, "Confirm + receipt")

' ── what the loop can call ────────────────────────────────────────────────
' No edges in here, and that is the point: the specialist works out what it
' needs and in what order, inside its own window. Everything nested is
' capability it holds — including the obligations, which were never steps.
SubAgent(specialist, "Refund specialist", "opus-5 · effort high") {
  Tool(t_calc, "Calculate refund")
  Tool(t_issue, "Issue refund", "IssueRefund v1.2.0")
  Knowledge(kb, "Returns policy", "vector · 8 chunks · max distance 0.6")
  Skill_Context(sk_rules, "Refund eligibility rules", "when a refund amount is being decided")
  Requirement(sp_readback, "Read back the refund figure", "instructed only")
  Control(gr_pii, "PII redaction", "before-tool · blocking")
}

Exit_Human(human, "Escalate to support")
Exit_Complete(done, "Refunded")

' ── the workflow: step to step, with the sub-agent as one call ────────────
Rel(entry, welcome)
Rel(welcome, verify)
Rel(verify, idcheck)
Rel_LLM(idcheck, human, "cannot identify the order")
Rel_Expr(idcheck, specialist, "customer_verified == true")
Rel_Expr(specialist, confirm, "refund_amount > 0")
Rel_Expr(specialist, human, "refund_amount <= 0")
Rel(confirm, done)
@enduml

Render this offline

This template ships in Gnomon and renders on your machine, with no account and nothing sent to a server. The browser editor is free and needs no install.

Get GnomonOpen the browser editor

Others in Agentic architecture diagrams