Agentic
L3 Flow
L3: one journey end to end, including how it exits.
- Format.puml
- Length61 lines
- LibraryAgentic notation
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)
@endumlRender this offline
This template ships in Gnomon and renders on your machine, with no account and no diagram uploads. The browser editor is free and needs no install.
Others in Agentic architecture diagrams
- Agentic — L1 LandscapeL1: the whole estate. Which agents exist and who talks to whom.
- Agentic — L2 Topology (router)L2: a router topology, where one agent dispatches to specialists.
- Agentic — L2 Topology (swarm)L2: a peer mesh with handoffs and no central coordinator.
- Agentic — L2 Capability matrixL2: what each agent may call, read and load. No sequence.
- Agentic — L4 Control planeL4, the hook plane on its own: what runs before and after each turn.
- Agentic — Trust boundaryWhere untrusted input crosses into privileged capability.
- Agentic — Exit mapEvery way the system can stop. Usually the most revealing one to draw.