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 nothing sent to a server. 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.