Technical overview

One protocol per problem.
Everything inspectable.

This isn't a monolithic app with an “AI feature.” It's a stack of six narrow protocols, each doing one thing well, composed into a multi-agent pipeline where every step on screen maps to a specific file, function, or wire event.

The architecture

One invoice, end-to-end.

What actually happens between “open the demo” and a posting record in the audit pane. Each edge is a real protocol carrying real traffic — animated so you can see the direction of flow.

UserBrowserNext.js FrontendAG-UI + A2UI clientFastAPIget_fast_api_app(ADK)ap-orchestratorGemini 2.5 Pro · LlmAgentap-pipelineADK SequentialAgentinvoice-extractorAILANG Parse · 0 LLM tokensap-validatorGemini Flashap-posterGemini FlashMCP SandboxCloud Run · separate originA2A discovery/.well-known/agent.jsonGemini EnterpriseHypothetical consumerHTTPSAG-UI SSEADK Runnertransfer_to_agentemit_invoiceemit_verdictemit_postingA2UI CardsMCP Apps postMessageA2A discoveryregisters managed agent
LegendAG-UI / A2UI trafficAILANG Parse + MCP AppsADK runtime + A2A
The layered view

Four layers, six protocols, one stack.

The same stack, flattened. Each layer is replaceable in isolation — that's why we're betting on protocols rather than a vertically-integrated framework.

EXTExternal consumer
Gemini Enterprise

Hypothetical: discovers ap-orchestrator via the L2 A2A card, registers it as a managed agent, renders the L4 A2UI Cards in its own chat surface — no code changes on this side

L4UI
A2UIMCP Apps

Declarative agent UI surfaces (A2UI) + sandboxed iframe artifacts (MCP Apps — Vendor KG, AP Analytics) with bidirectional postMessage

L3Transport
AG-UI

SSE streaming — every tool call, stage progress event, and emit_* payload reaches the client live via @ag-ui/client

L2Coordination
A2A

Cross-agent discovery via /.well-known/agent.json — registerable with Gemini Enterprise as a managed agent without code changes

L1Framework
Google ADK

SequentialAgent orchestration, session/memory services, deterministic sub-agent dispatch

What each piece does

Six pillars, in order.

AILANG leads — it's ours, and it's the reason this stack can promise zero-LLM-token extraction. Everything else is industry protocol, picked for fit.

01

AILANG

Reads invoices (DOCX, ODT, XLSX, EML, PDF) into structured JSON without burning a single LLM token on extraction. AILANG's effect system guarantees the parser can't perform any side-effect outside the parse — what comes out is auditable by construction.

Where to see it

Process a sample invoice and watch the Extract step in the pipeline rail finish in under a second on a clean DOCX. That's pure AILANG — Gemini is never asked to read the file.

ailang.sunholo.com
02

Google ADK

Four declarative SKILL.md files plus a SequentialAgent compose the AP pipeline (Intake → Extract → Validate → Post). No hand-rolled routing code: the workflow is deterministic Python orchestration, sub-agent dispatch is resolved by the ADK runtime, and session/memory/artifact services are stock ADK.

Where to see it

backend/skills/templates/ap-orchestrator/SKILL.md plus the three specialist SKILL.md siblings. Open the Audit View on any specialist chip to see the ADK Runner trace.

google.github.io/adk-docs
03

A2UI

Every emit_* tool the pipeline calls writes a typed JSON payload that the frontend renders as an A2UI Card — invoice extraction, AP verdict, posting record. No bespoke component per skill: the same renderer handles every emit_* payload across the whole product, courtesy of the JsonAsA2UICard adapter.

Where to see it

Right-hand 'workspace' surface during a pipeline run. Each completed step pushes a Card with full inspectable detail.

agent-to-ui spec
04

MCP Apps

Two MCP Apps ride alongside the pipeline: the Vendor Knowledge Graph (a Cytoscape-rendered network of vendor, prior invoices, POs and audit citations) and the AP Analytics Dashboard (aging, vendor mix, GL breakdown — Chart.js, canvas-only, no CDN bloat). Both run on a separate-origin Cloud Run service and use the spec's bidirectional postMessage handshake — click a citation row in the KG or a stat tile in the dashboard and the iframe sends ui/update-model-context back to the host, which auto-drafts a follow-up question to the agent. Sandboxed UI primitives the agent can react to, not decorative embeds.

Where to see it

Workbench right pane during a pipeline run — Vendor KG appears under the Vendor tab, the dashboard under Analytics. Click any node or stat to see the round-trip fire a chat message.

modelcontextprotocol.io/apps
05

AG-UI

The four-step pipeline rail you watch animate during a run is driven by AG-UI TOOL_CALL_START/END and STAGE_PROGRESS events streamed over SSE. The same channel carries the thinking output, the emit_* tool payloads, and the final assistant message — one connection, every observable.

Where to see it

Open the browser DevTools Network panel during a run — the /chat/stream request stays open and you can watch the event stream tick.

ag-ui.com
06

A2A

The ap-orchestrator publishes an /.well-known/agent.json with its full capability profile and X-A2A-Extensions header support. That makes it registerable with Gemini Enterprise as a managed agent without code changes — discovery and handshake follow the A2A spec.

Where to see it

curl https://gde-ap-agent-blqtqfexwa-ew.a.run.app/.well-known/agent.json — every field is there.

Who can consume this

  • Gemini EnterpriseHypothetical consumer — point Gemini Enterprise at the agent card URL and ap-orchestrator becomes a managed agent in the Agentspace catalogue, with A2UI Cards rendering natively in its chat surface.
Read the live agent card →
a2aproject.dev
The walkthrough

The end-to-end flow.

  1. 01

    Land on the orchestrator chat, pick a sample invoice or drop your own.

  2. 02

    Pipeline rail animates Intake → Extract → Validate → Post in real time.

  3. 03

    Each completed step pushes an inspectable A2UI Card to the workspace pane.

  4. 04

    Click any specialist chip on the audit view to inspect tools, input, output.

  5. 05

    Click a citation node in the Vendor KG — the iframe round-trips a chat message asking about that prior invoice.

  6. 06

    Click a stat tile in the AP Analytics Dashboard — same handshake, agent answers with the matching invoice list.

  7. 07

    Every decision is traceable to a specific tool call you can re-run standalone.

Deployed surface

Where to verify each claim.

Frontend + backendgde-ap-agent-blqtqfexwa-ew.a.run.appSingle Cloud Run service. Next.js front, FastAPI on /api/* via reverse proxy.
MCP App sandboxmcp-sandbox-374404277595.europe-west1.run.appSeparate-origin Cloud Run. Vendor KG + AP Analytics artefacts, bidirectional postMessage.
Agent card (A2A)/.well-known/agent.jsonDiscovery surface for Gemini Enterprise registration.

That's the stack

See it run.

Open the demo