Lab Overview¶
Intro slide deck Lab guide short URL: ibm.biz/lab-1219
The scenario: Apex Systems¶
Apex Systems is a mid-size enterprise IT services company managing infrastructure across data centers and cloud regions. The NOC (Network Operations Center) receives free-text incident reports from monitoring tools, tickets, and on-call engineers — but today those reports live in chat threads, email chains, and tribal knowledge.
Last quarter's post-mortem told the story:
- Two P1 outages (auth failure, API gateway) lasted 4+ hours because manual triage classified them as P3 — $150k combined revenue loss
- A payment-gateway incident was routed to the networking team instead of payments, burning 20 engineer-hours before correction
- NOC analysts cannot explain why an incident was routed or whether escalation was appropriate — no audit trail exists
Leadership mandate: automate incident triage and routing with AI agents — without losing enterprise control.
Why agentic AI (not "just a chatbot")¶
| Chatbot | Agent |
|---|---|
| Answers questions | Takes actions |
| One LLM call | Multi-step reasoning + tool calls |
| No side effects | Mutates state (e.g., IncidentStatus → TRIAGING) |
| Stateless | Shares context via AgenticScope across workflow |
| Single model | Composed specialists (triage, diagnostic, impact) |
Apex Systems needs systems that reason over messy natural-language incident reports, act by calling enterprise tools, collaborate across specialized roles, pause for humans on high-stakes outcomes, and scale across teams via open protocols.
What you will build¶
A production-shaped agentic incident management platform on IBM Enterprise Build of Quarkus — from a single agent to a full supervisor orchestration with human oversight and distributed services.
%%{init: {'look':'handDrawn','theme':'base','themeVariables': {'darkMode':false,'background':'#FFFCF5','primaryTextColor':'#1F1F1F','secondaryTextColor':'#1F1F1F','tertiaryTextColor':'#1F1F1F','textColor':'#1F1F1F','lineColor':'#4A4035','edgeLabelBackground':'#FFFCF5','clusterBkg':'#F5F5F0','clusterBorder':'#6B5B45','fontSize':'16px'},'flowchart': {'nodeSpacing':35,'rankSpacing':55,'padding':18}}}%%
flowchart TD
IR([Incident Report])
RIA(["':8888 — Remote Impact Assessment'"])
subgraph main["Apex Systems Incident Management · Quarkus :8080"]
IPW(["IncidentProcessingWorkflow<br/>@SequenceAgent"])
IAW(["IncidentAnalysisWorkflow<br/>@ParallelMapperAgent x3"])
ISA(["IncidentSupervisorAgent<br/>@SupervisorAgent"])
RA([ResolutionAgent])
TA(["TriageAgent<br/>@ToolBox"])
DA([DiagnosticAgent])
EA(["EscalationAgent<br/>+ HITL gate"])
IA([ImpactAgent])
end
IR --> IPW
IPW --> IAW
IPW --> ISA
IPW --> RA
ISA --> TA
ISA --> DA
ISA --> EA
ISA --> IA
IA -->|A2A| RIA
style IR fill:#E8DCC4,stroke:#6B5B45,color:#1F1F1F,stroke-width:2px
style IPW fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style IAW fill:#D4E6F1,stroke:#2E6B8A,color:#1F1F1F,stroke-width:2px
style ISA fill:#FFE4CC,stroke:#B87333,color:#1F1F1F,stroke-width:2px
style RA fill:#D8F0D8,stroke:#3D7A3D,color:#1F1F1F,stroke-width:2px
style TA fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style DA fill:#D8F0D8,stroke:#3D7A3D,color:#1F1F1F,stroke-width:2px
style EA fill:#D8F0D8,stroke:#3D7A3D,color:#1F1F1F,stroke-width:2px
style IA fill:#FFF8DC,stroke:#C4A000,color:#1F1F1F,stroke-width:2px
style RIA fill:#F5D0D0,stroke:#A04040,color:#1F1F1F,stroke-width:2px
style main fill:#F5F5F0,stroke:#8B8070,color:#1F1F1F,stroke-width:2px
Your learning path¶
Each exercise adds a new capability, guided by a persona facing a real IT operations problem:
| Exercise | Persona | Problem | Pattern you learn |
|---|---|---|---|
| 1 — Agent + tool | Sam — NOC analyst | Free-text reports pile up; triage is manual | @Agent + @ToolBox |
| 2 — Policy as prompt | Chris — Ops lead | Diagnostic decisions need policy, not code | @SystemMessage as policy declaration |
| 3 — Parallel agents | Chris — Ops lead | Three analyses must run concurrently | @ParallelMapperAgent + @Output |
| 4 — Supervisor orchestration | Priya — IT service mgr | Critical incidents need adaptive escalation | @SupervisorAgent orchestration |
| 5 — AI governance | Jordan — Platform engineer | Must ship governed code; copilots hallucinate | AGENTS.md + IBM Bob |
| 6 — Human gate + tracing | Alex — Compliance officer | P1 incidents need approval + audit trail | HITL + OpenTelemetry |
| 7 — Remote agents (A2A) | Riley — SRE lead | Impact assessment is a separate team | A2A remote impact agent |
| 8 — Quality loop (bonus) | Jordan — Platform engineer | Post-incident reports need iterative refinement | @LoopAgent + @ExitCondition; optional builder comparison |
Exercises 1–4 are hands-on code-along — you type agent code into stub files with hot reload.
Exercise 5 uses IBM Bob to govern and validate the system you built.
Exercise 6 codes EscalationProposalAgent in lab/, then tests the full HITL flow and OTel tracing from the solution.
Exercise 7 runs a pre-built A2A solution to explore remote agent patterns.
Exercise 8 (bonus) is a self-paced code-along in a standalone project — builds a declarative quality loop with Quarkus Flow and includes an optional programmatic builder comparison.
The IBM stack¶
| Layer | Component | Role |
|---|---|---|
| Runtime | IBM Enterprise Build of Quarkus | Build-time agent validation, fast startup |
| AI extension | Quarkus LangChain4j | Declarative agents, workflows, A2A |
| Dev tooling | IBM Bob | SDLC partner: plan → code → test → secure |
| Context efficiency | AGENTS.md |
Targeted Bob context — avoids token-bloat scans |
Learning outcomes¶
After this lab you will be able to:
- Declare agents with
@Agent,@SystemMessage,@ToolBoxand explain what Quarkus generates at build time - Compose multi-agent workflows: sequence, parallel, and supervisor orchestration
- Use
@SupervisorAgentfor adaptive AI routing vs hardcoded conditional logic - Author an
AGENTS.mdto make IBM Bob cost-efficient on agentic projects - Distribute agents across services with A2A (
@A2AClientAgent) - Add human-in-the-loop gates and read OpenTelemetry spans for compliance and FinOps
- Build a bounded declarative quality loop (
@LoopAgent+@ExitCondition) and compare it with the programmatic builder
The seeded incidents¶
When you start the app in Exercise 1, you'll see 8 incidents in the Incident Dashboard:
| Incident # | System | Service | Priority | Initial Status |
|---|---|---|---|---|
| 1 | payment-gateway | checkout-api | P2 | OPEN |
| 2 | auth-service | user-login | P1 | IN_PROGRESS |
| 3 | inventory-db | stock-sync | P3 | OPEN |
| 4 | cdn-edge | static-assets | P4 | TRIAGING |
| 5 | email-service | notification-api | P2 | OPEN |
| 6 | search-engine | product-search | P3 | OPEN |
| 7 | monitoring | alerting-api | P2 | OPEN |
| 8 | api-gateway | rate-limiter | P1 | IN_PROGRESS |
You'll use these incidents throughout the exercises — processing them with different reports to trigger different agent behaviors.
Patterns cheat sheet¶
Keep this handy as you work through the exercises:
Goal: single specialist agent → @Agent + @ToolBox (Ex 1)
Goal: policy as prompt → @SystemMessage (Ex 2)
Goal: step-by-step pipeline → @SequenceAgent (Ex 2–4)
Goal: concurrent work → @ParallelMapperAgent (Ex 3)
Goal: data-driven branching → @ConditionalAgent (Ex 2)
Goal: adaptive multi-agent → @SupervisorAgent (Ex 4)
Goal: AI governance → AGENTS.md + IBM Bob (Ex 5)
Goal: human approval → @HumanInTheLoop (Ex 6)
Goal: delegate to remote agent → A2A + @A2AClientAgent (Ex 7)
Goal: bounded quality loop → @LoopAgent + @ExitCondition (Ex 8)