User manual

Camel TUI Observing Integrations

The TUI shows what a running integration is doing: every exchange as it happens, the full history of a message through the routes, the errors with their context, the traces, and the JVM underneath. This page covers the tabs for watching and troubleshooting an integration.

See Camel TUI for getting started and the other pages.

Key Features

  • About — what an integration does and what has happened, at a glance and without an AI

  • Timeline — per second what went wrong and what it did to each route, and the exchanges of a second

  • Message insight — step through the history of an exchange, as a list, a waterfall or on the diagram

  • Errors — failures with the stack trace, the message and the path that led there

  • OpenTelemetry spans — the traces of the integration, without a tracing backend

  • HTTP probe — call the HTTP endpoints of the integration from the TUI

  • Deep dives — CVE audit, Kafka, SQL, memory leaks, JFR profiling and the catalog

About

The Overview tab (key 1) has two views, switched with v: About an integration, shown when one runs, and Integrations, the table of all of them. About tells what an integration you have not seen before does, and what has happened to it, with no AI:

About the chaos demo: its purpose
  • The header has the Camel version, runtime, files, routes and uptime, and the purpose: the comment at the top of the main source file (a YAML # comment, a Javadoc or // comment in Java, an XML comment), else the descriptions of the routes.

  • In, Routes and Out say what starts it, its routes (a route called with direct sits under its caller with ↳, one handed off with seda with ⇢) and what it talks to, with the exchanges since it started and a sparkline of the last 5 minutes. Up and Down select a line, and Enter opens a route drilled down on the Diagram, or an endpoint with its details on the Endpoint tab.

  • Last 5m has the exchanges and how they ended, with the cause that happened most, and What happened a strip per route over the last 5 minutes, coloured as on the Timeline, with when the worst happened. The strips are as wide as the screen allows, and on a tall screen up to two rows high, with room around the panels. + and - zoom between 5, 2 and 1 minutes (zooming in centres on the last trouble, so you see what the other routes did then), and Left and Right move a zoomed window. 4 opens the Timeline for each second.

camel get about shows the same from the command line (see Diagnostics).

Timeline

The Timeline tab (key 4) shows the last minute of the selected integration on one time axis, one column per second: what went wrong on top, and what it did to the routes under it. Read from left to right, it tells the story of an outage: the stock service answered 503 for fifteen seconds, the orders went to the dead letter channel, shipping had nothing to ship, and everything recovered by itself.

The Timeline tab in an outage of the stock service: the errors per second on top
  • Errors/s stacks the errors per second by the kind of exception, with the HTTP status when there is one. With camel-chaos, the faults of each chaos rule are a layer of their own, marked 🎲, so an injected fault and a real one stay apart. When no exchange failed, the WARN and ERROR lines of the log are the cause instead (log ERROR, log WARN), read from the log file of the integration: something that went wrong outside an exchange, such as a consumer that cannot connect. When nothing went wrong the band is one line.

  • Routes has a line per route. The height is the exchanges done that second, and the colour the worst that happened to them: completed, recovered by redelivery, handled by the error handler (such as the dead letter channel), or failed. A second a chaos rule had the route down is shaded, and a mark says what happened to the route then: ▶ started, ■ stopped, ↻ reloaded, ✕ removed. A ▒ is a second a circuit breaker of the route was open (the Circuit Breaker EIP with camel-resilience4j or camel-microprofile-fault-tolerance, or the throttling exception route policy), and the route says ⚡ open 10s: why it went quiet, or ran its fallback, without failing.

The Timeline of the circuit breaker example: the supplier fails three times
  • The selected route is shown in detail: its outcomes stacked per second, its mean processing time with the p95 and max of its slowest second, its exchanges in flight, its redelivery attempts and its slowest remote calls. The screen opens on the route that had the worst time.

w switches the window between 1, 2 and 5 minutes, and Space pauses so a moment does not scroll away. Paused, Left and Right move a cursor over the seconds (Shift with them goes back and forth in the 5 minutes kept), and Enter lists the exchanges of the second at the cursor: the failed, handled and recovered ones and the 3 slowest, with their outcome, time and slowest call. Enter again shows the selected exchange with the remote calls it made and its exception, or for a recovered one the failure it was redelivered for.

The exchanges of a second in the outage: the orders handled by the dead letter channel

Shift+F8 asks the AI to explain what happened, as a story of cause and effect.

The integration records the timeline itself, for the last 5 minutes, with the timeline dev console, which is on in the dev profile of camel run. With camel-chaos it records the faults of the chaos rules and the seconds they had a route down too, and the seconds a circuit breaker was open. So the tab opens with the last minutes, also when the TUI started after the integration, and camel get timeline shows the same from the command line (see Diagnostics).

Message Insight

The Inspect tab lets you step through an exchange processor by processor — like scrubbing through a video timeline of your message’s journey. This is the key to understanding what Camel does with your data at every step.

Inspect tab showing message history and exchange details

History of Last Exchange

When you open the Inspect tab, it shows the last completed exchange. The top panel lists every processing step with:

  • Step number and direction (-→ or ←-)

  • Route and Node ID of the processor

  • BHPV change indicators — letters light up in yellow when Body, Headers, Properties, or Variables changed at that step

  • Elapsed time per step

Select a step with arrow keys, and the detail panel below shows the full exchange state: body content, headers, properties, and variables at that exact point in the processing chain.

Controlling What You See

Toggle sections of the detail view:

  • b — show/hide message body

  • h — show/hide headers

  • p — show/hide exchange properties

  • v — show/hide exchange variables

  • w — toggle word wrap

  • n — toggle description/processor labels

Waterfall View

Press g to switch to the waterfall view — a horizontal bar chart showing how long each processor took. This makes it easy to spot bottlenecks: long bars stand out immediately. The selected step is highlighted with >> and processing times are color-coded from green (fast) to red (slow).

The steps of an exchange as bars: the long ones show where the time went

Replay on the Diagram

Press d to overlay the message path on the route topology diagram. This is where the timeline replay comes alive:

  • The diagram highlights which route and processor handled the message at each step

  • Use Up/Down arrows to step forward and backward through the path

  • An Info panel on the left shows the exchange state (body, headers, properties, variables) at the current step — values that changed from the previous step are highlighted in yellow

  • Step through the entire exchange to watch how the message payload transforms as it flows through processors, filters, and content-based routers

  • Press Enter on a route node to drill down into its internal EIP structure while replaying

  • Press Esc to go back, t to return to the topology view

  • Press i to cycle the info panel size (narrow / wide / full)

This is especially powerful for understanding complex multi-route flows where messages are routed through direct, seda, or kafka endpoints between routes.

Live Tracing

When you run your integration with tracing enabled:

camel run my-route.yaml --trace

The Inspect tab gains a live trace panel showing every exchange as it flows through the system. Each exchange is listed with its timestamp, starting route, status (Processing/Done/Failed), elapsed time, and step count. Press Enter to drill into an exchange and see every processor step — the same step-by-step view and diagram replay work here too.

Use s to cycle sort order (time, route, elapsed, exchange) and S to reverse. Press F5 to clear captured traces.

Troubleshooting Errors

The Errors tab collects failures with full stack traces and exchange context. When errors occur, a red badge appears on the tab with the number of errors that happened. The tab keeps only the newest few of each kind of error (the same route, step and exception), and its COUNT column says how many times that kind happened.

For deeper troubleshooting, press d on an error to see its Diagram view: the path the failed exchange took through the routes, replayed from its message history (the same replay as in the Inspect tab):

  • Failed steps are highlighted in red on the diagram

  • Step through the failing exchange to see the message state at each processor leading up to the failure

  • The Info panel shows the exception message and which node threw it

  • Compare the message body and headers before and after the failing step to understand what triggered the error

With chaos on in the integration (camel run --chaos), press ! on a real error to make a chaos rule of it: the Chaos screen opens with a rule that makes the same error again ten times, at the same step with the same exception and message, or at the same endpoint with the same HTTP status, such as step=callStock error exception=java.net.ConnectException message="Connection refused" until=10. Change it if needed, and Enter adds it after you confirm. Fix the bug, then prove the fix against the same failure without waiting for it to happen again.

This combination of error details + visual diagram replay gives you a complete picture of what went wrong and why — without leaving the terminal.

Press Shift+F8 on an error to ask the AI to fix it: the AI panel opens with the source line of the processor the error happened at, and its exception, the same question as Shift+F8 on a failing line in the Source editor.

Shift+F8 on an error writes the question for the AI

The Log tab has the same key. Shift+F8 asks the AI about the ERROR on the screen: for a failed exchange, the step that failed comes from its Message History, so the AI is asked to fix that line of the route; for a log with loggingLevel: ERROR, the logger names the source line. Any other ERROR is explained, and fixed when the cause is in the project. When different ERRORs are on the screen, a list comes up to pick one, newest first; the same error repeated is listed once.

Shift+F8 in the Log tab with two different ERRORs on the screen

The Log tab shows the log in one of three views, and c goes to the next one:

  • compact (the default): the time, level, logger and message of each line, as the date, pid and thread take most of a row in a terminal. The same line logged again and again is one line with a count, such as Hello World (x17).

  • wide: every line as it was logged, one by one, with the date, pid and thread.

  • wide, collapsed: the lines as they were logged, with the repeats as one line with a count.

The line at the top of the screen stays there when you change the view.

A failed order: the path from checkout to payment-provider

OpenTelemetry Spans

The Spans tab (under More, shortcut o) visualizes OpenTelemetry traces collected from your running integration. It shows every span with trace ID, span name, kind, status, duration, and Camel-specific context (route ID, processor ID).

Run your integration with OpenTelemetry enabled:

camel run my-route.yaml --dep=camel:opentelemetry

Features:

  • Waterfall view — spans displayed as a timeline showing parent-child relationships and duration bars, color-coded from green (fast) to red (slow)

  • Trace grouping — spans grouped by trace ID so you can follow a complete request across multiple routes and components

  • Camel-only filter — toggle to show only Camel-originated spans, hiding framework and library spans

  • Sort and search — sort by trace ID, route, status, duration, or span count; filter with text search

  • Error highlighting — failed spans (status ERROR) are highlighted in red

This is especially useful for understanding latency in multi-route integrations and for correlating Camel processing with external service calls (HTTP, database, messaging).

Process Information

The Process tab (under More, shortcut p) shows JVM process details for the selected integration: Java version, PID, uptime, command-line arguments, and system properties.

HTTP Probe

The HTTP tab (under More > Routing > HTTP) lists all HTTP/REST endpoints in your integration. Press Enter on any endpoint to open the built-in HTTP probe — a lightweight Postman for testing your REST services directly from the terminal.

Probe Layout

The probe screen is split into a request panel (left) and response panel (right):

Request panel — top to bottom:

  • Method — HTTP verb cycler (GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS). Use Left / Right arrows to cycle.

  • Path — editable path field, pre-filled from the endpoint. Supports {xxx} placeholders.

  • Path Parameters — if the path contains {id}, {name}, etc., a fill-in field appears for each placeholder. Values are substituted into the URL when sending.

  • Query Parameters — key-value pairs appended to the URL as ?key=value&key2=value2. Press + to add a parameter.

  • Content-Type — cycler with common MIME types (application/json, application/xml, text/plain, etc.). Pre-filled from endpoint metadata when available.

  • Accept — cycler for the Accept header. Pre-filled from endpoint metadata.

  • Headers — custom request headers as key-value pairs. Press + to add a header.

  • Body — multi-line text area (6 rows) for request body. Supports JSON, XML, plain text, or file:payload.json to load from a file. Press Enter to insert newlines.

  • History — previously sent requests with status codes and elapsed times. Press Enter to replay a request, restoring all fields.

Response panel — shows the response body with status code, elapsed time, and response headers. Press p to toggle pretty-printing for JSON and XML responses.

The resolved URL is shown at the top of the request panel as a clickable hyperlink that you can copy for use with curl or other tools.

Sending Requests

Press F5 to send the request (same pattern as the SQL tab). The response appears in the right panel. While sending, the status shows a spinner.

Keyboard Shortcuts (Probe)

Key Action

F5

Send request

Enter

Insert newline (body) or advance to next field

Tab / Shift+Tab

Next / previous field

Left / Right

Cycle method, Content-Type, or Accept values

+

Add query parameter or header

Backspace

Remove empty query parameter or header

p

Toggle pretty-print response

Esc

Exit probe mode

Highlighted Features

Beyond the core tabs described above, the TUI includes several specialized screens worth highlighting.

Chaos

With camel-chaos (camel run --chaos), the Chaos tab (under More > Observability) shows the faults that the chaos rules inject into the running integration, and what they do:

  • The verdict of the report (PASS or FAIL with the reason), the messages lost, the expectations (met, unmet, pending) and the faults of all rules in the last minute.

  • The rules: target, fault, the observed rate next to the rate of the rule (24% of 25%), how often and how long ago it fired, its faults per second over the last minute as a sparkline, the effect of its faults on the exchanges (completed, recovered by redelivery, handled by the error handler, failed, in flight), and a note (when it ends or starts, its bursts, what a stall or lifecycle rule does to its route).

  • The selected rule in detail: the effect as a bar, its expectation with the time left, why it skipped faults, and its recent faults with the endpoint or step, the route and the exchange.

  • The counts of the report per route: completed, failed, kept by the consumer, handled, redeliveries.

The Chaos tab: a failed expectation

While a rule injects faults, the title bar shows a badge on every screen (🎲 chaos 3 rules · FAIL), so a failure made on purpose is not debugged as a real one. The exchanges a rule faulted are marked with the rule (🎲r1) on the Errors tab and in the exchanges of a second on the Timeline tab, and their detail there and on the Inspect tab says "injected by chaos rule r1", with the rule: an error knows it from the CamelChaosRule exchange property, and for the others the TUI remembers the exchanges of the recent faults of the chaos report while it runs.

The Errors tab: the errors chaos rule r1 made are marked

The rules are added, changed and removed on the tab, as with camel cmd chaos-add, chaos-change, chaos-remove and chaos-clear (see Control while it runs):

  • a adds a rule. It lists the known rules of camel-chaos by what goes wrong (Downstream: returns an error, is slow, times out, did the work and then failed; Messages; Consumers and routes; Error handling), from the chaos model of the catalog. For the one chosen, a field per value of its rule: the endpoints, routes and steps of the integration are picked with Left and Right (for "Returns an error (HTTP status)", the HTTP endpoints the routes call), the other values start with a default, and the rule is shown as it is built. The last entry types the rule as one line (endpoint=kafka:orders* error rate=0.1 until=5m).

    Adding a chaos rule from the known rules: the HTTP endpoint of the route is picked
  • w shows what to try: the integration suggests rules per route from what its routes do, the most worth trying first, each with why (see the camel-chaos documentation, "What to try"). Enter types the selected rule in, to change or add. A suggestion whose kind of fault was tried in its route is marked, and the detail says what was tried in the route and what is not tried yet.

  • e changes the selected rule, starting from the rule as it is.

  • ! on the Endpoint tab, the Consumers tab or a node of the Diagram opens the known rules for what is selected, with it filled in: for a to or an endpoint the routes send to, the faults of that endpoint (an HTTP status only for an HTTP endpoint) and of the step; for the from of a route, a consumer or an endpoint a route consumes, the faults of the route, and of its polls when it polls. On the Errors tab, ! makes a rule of the selected error instead, which fails the same way again (see Troubleshooting Errors).

    ! on the to callStock of the Diagram: the known rules for its HTTP endpoint and its step
  • x removes the selected rule, c removes all rules (the report keeps what they did), and R starts a new experiment: no rules and a new report, with the same seed.

  • t makes a test of the selected rule with AI, so the finding runs again with the same faults. The AI panel opens with the rule, the seed and what the rule did. For a Maven project the AI writes a JUnit test with chaos switched on and ChaosAssertions (see the camel-chaos documentation); for a folder that runs with camel run, a scenario with an expectation and the camel run --chaos=<file> --max-seconds=<seconds> command whose exit code is the verdict. It adds an expectation when the rule has none, and asks before it writes the file.

  • s saves the rules as a scenario in the folder of the integration: chaos/<name>.chaos unless you type another file, with the seed and one rule per line, so the experiment can run again with camel cmd chaos-load or camel run --chaos=<file>. A file that is there already is replaced only when you say yes.

  • d describes the chaos with AI, when the AI panel is there: say the chaos you want in your own words, such as "the order route fails 5% of the time, or when the country is Spain". Enter sends it to the AI panel with the routes, the sends and the rules of the integration. The AI writes the rules, checks them with tui_chaos_check (each in plain words, and what it would hit), shows them, and adds them with tui_chaos_add (or changes a rule with tui_chaos_change, which keeps its id and gives it a new version), asking you to confirm each one. It does not change the routes. The AI panel has these tools only while chaos is on in the integration.

    Describe with AI: the AI checked the two rules of "the order route should fail 5% of the time

Each asks to confirm with y, with the rule shown. A rule that is not valid comes back with the reason, and a rule that matches nothing in the integration (often a typo) with a warning; press e there to change it.

Adding a chaos rule on the Chaos tab: the rule is shown before it is added

CVE Audit

The CVE Audit tab (under More > Project) scans all Maven dependencies on your integration’s classpath against the OSV.dev vulnerability database. It queries every JAR using the OSV batch API and displays known vulnerabilities grouped by severity (Critical, High, Medium, Low).

Each vulnerability shows the CVE ID, affected artifact, the direct dependency that pulls it in (VIA column), and a summary. Select a CVE to see full details including CVSS vector, published date, fixed versions, and aliases. Results are cached globally — switching integrations that share JARs is instant.

Kafka

The Kafka tab (under More > Data) provides a dedicated view for Kafka consumers and their connectivity status. It shows consumer group details, topic assignments, partition offsets, and reconnection state. When a broker connection drops, the Recovery Tasks tab shows the reconnection task with its Waiting/Attempting status, retry count, and error details.

SQL Query and SQL Trace

When your integration includes a DataSource, two SQL tabs appear under More > Data:

  • SQL Query — an interactive SQL console where you can write and execute queries against any DataSource in your integration. Results are displayed as a formatted table with column types.

  • SQL Trace — captures and displays SQL statements executed by your routes in real-time, showing query text, execution time, and the route that triggered them.

A query in the SQL Query tab against the DataSource of the integration

Memory Leak Detection

The Memory Leak tab (under More > JVM) uses Java Flight Recorder (JFR) to diagnose memory leaks in your running integration. It runs two sequential recordings and compares object retention trends, classifying each class as growing, stable, shrinking, new, or gone. This is lightweight and safe for production use.

Two recordings compared: byte arrays grow 133% and are flagged as a leak

JFR Runtime Profiling

The JFR tab (under More > Observability) gives you a lightweight profiling view of your running integration using Java Flight Recorder. JFR is built into the JVM with very low overhead, making it suitable for near-production use cases where you need timing data without impacting throughput.

Start your integration with JFR runtime instrumentation enabled:

camel run my-route.yaml --jfr

The JFR tab shows the recording status and event configuration. Press F5 to take a snapshot of the active recording — the TUI aggregates all Camel events and presents them in five views:

  • Routes (key 1) — per-route totals, failure counts, and min/mean/max duration

  • Processors (key 2) — per-processor statistics with type and owning route, sorted by slowest first

  • Endpoints (key 3) — per-endpoint send statistics with duration

  • Failures (key 4) — recent exchange failures with exception type and message

  • Redeliveries (key 5) — recent redelivery attempts with attempt and max counts

Press Enter on a route to drill down into its processors filtered by that route. Press s to cycle sort columns, and Esc to go back.

Each snapshot is a point-in-time read — the recording keeps running, so you can press F5 again at any time to see updated statistics as more messages flow through the system.

Catalog

The Catalog tab (under More > Project) lets you browse the full Camel component catalog from within the TUI. Search for components by name, view their documentation, options, and supported headers — useful when building routes and you need to check what options a component supports.

It lists Kamelets too: the project’s own Kamelet files first, marked project, and the Kamelets of the catalog that the routes use (all of them with the full catalog, a). f cycles the kind, kamelet included, and d shows the properties of a Kamelet: required, type, default and description.

Keyboard Shortcuts

Inspect Tab

Key Action

Up/Down

Navigate between steps

b / h / p / v

Toggle body / headers / properties / variables

w

Toggle word wrap

g

Toggle waterfall view

d

Toggle diagram replay mode

+ / -, z

Zoom the replay diagram in or out, or fit it to the screen (the zoom of the Diagram tab, see Zoom and Folding)

n

Toggle description labels

F5

Refresh / clear traces

Semantic

The Semantic tab (More > AI > Semantic) inspects the selected running application’s Semantic language definitions and expert contracts. It appears when the runtime provides the semantic metadata console.

Press v or click the view bar to switch between three views:

  • Definitions lists published definitions with their expert, operation, result type and state selector. The detail pane shows the state selector, configured parameters and the operation’s contract.

  • Experts places a compact expert list above the selected expert’s contract on the left, including input types, result meaning, supported evidence and parameter constraints. The right column lists definitions using the expert, with their state selectors, above a larger inline playground for calling the expert directly with text or structured input. The contract remains visible when the playground is expanded.

  • Relationships maps definitions to their expert operations. Definitions sharing an operation join the same card. Definition cards include their state; expert cards show the operation, input and result types and reuse count. Labeled arrows represent references, with the selected relationship highlighted. The diagram scrolls with the selection. Below 120 columns, the map fills the view.

All three views share the selected definition and expert. Selecting a definition, including one in the Experts view, selects its operation in the contract and playground. Enter follows a definition to its expert, or returns from an expert to its selected definition. Tab changes pane focus, Up/Down and PgUp/PgDn navigate, / filters published metadata (including parameters and errors), and r refreshes the runtime snapshot. Inspection reads published runtime declarations, so unsaved source edits are not reflected here. Reading the contracts does not run an inference.

Try an expert directly

In Experts, click the operation strip or use [ and ] to select an operation. The strip includes usage counts. The linked-definition highlight follows a matching operation and clears if none uses it. Press t to edit the playground. If the contract publishes a free-text instructions parameter, it appears in a dedicated Instructions editor above Text to assess (or State to assess in JSON mode). Enter the question in Instructions and the content being evaluated in the text/state box below it. Criteria and other parameters stay on the right. Operations without instructions use a single Input editor. Enter inserts a new line; Ctrl+r or the Run button explicitly evaluates the input. Tab and Shift+Tab move through Instructions (when present), text/state, parameter controls and output. Tab past the output to return to the expert list. Ctrl+l clears the current field or restores an optional choice to its expert default; Esc leaves the editor while preserving the input and output.

Click Load params or press Ctrl+p to copy the selected definition’s parameters, including Instructions, into the form. The shortcut works while editing; p also works outside the editor. Click Clear params or press Ctrl+k to empty Instructions and all other parameter fields and rows. Both actions preserve the text/state to assess and change only the editable draft. The definition’s state selector is not applied. Unset optional parameters use expert defaults; required values must be filled before Run. These controls are disabled while an evaluation is running.

While editing text/state, use Ctrl+t to switch between literal text and JSON state when the operation supports both. Instructions remain plain text. Structured-only operations open in JSON mode. JSON state must be an object or array. Parameters use a form generated from the operation contract: multiline text fields, numbers, Boolean/allowed-value selectors, key/value rows for maps, and ordered rows for lists. Required fields are marked; optional fields can be left unset to use expert defaults. For decision experts, fill in instructions, then the named categories or ordered score levels.

Use Ctrl+n or the Add entry button to add a collection row, Ctrl+d to remove it, and Ctrl+Up/Down to move it. List indices start at zero and follow the order sent to the expert. Use Left/Right, Space or Enter to cycle Boolean and allowed-value controls. The form validates required values, numeric bounds, sizes and duplicate map keys before calling the expert. For collection items whose type is itself a map, list or arbitrary object, the individual value still uses JSON because the contract does not describe its nested fields.

Ctrl+e expands the playground into the right pane, giving more space to edit the fields and inspect the result; press it again to restore. The form scrolls to keep the focused control visible.

The playground uses Camel Semantic’s expert abstraction without a named definition, state expression or route. Text is passed literally, including any ${…​} or {{…​}} fragments. The selected operation’s contract and provider validate parameters, input and the typed result. For example, enter 0.5 directly into a published threshold field. Expert defaults are independent of any definition’s configured parameters. To reuse a definition’s parameters, leave editing and press p. This replaces the parameter draft, including instructions, with an editable copy labeled with its source. It preserves your input text/state and does not apply the definition’s state selector. Input modes, field types and constraints come from the expert contract. Static result bounds are labeled Supported range. If the expert publishes a scoreLevelsParameter relationship, Definitions and Relationships also show the Effective range derived from the configured levels. Try expert derives its range from the entered parameters. Results label score probabilities with the level descriptions and explain fractional scores between adjacent levels. Result labels retain the levels used by that run when the draft changes. Experts without this metadata retain their published bounds and raw labels.

The answer appears below the input, followed by its result meaning, elapsed time and any returned probability, confidence, a labeled probability distribution or structured metadata. Tab focuses the output for scrolling. A changed input is marked until it is evaluated again. Each expert and operation keeps its own draft and last result until the integration changes. A changed operation contract starts a new draft. Late responses stay associated with the operation that ran them.

A configured expert is not a service-health guarantee. Provider failures and request timeouts appear inline and keep the input and parameter draft for an explicit retry. If the selected application disconnects, Run is disabled and the cached draft stays visible until that connection returns or another integration is selected. Inspecting a contract does not probe the provider by running inference.

Monitor semantic evaluations

The Monitoring view reads the same cached measurements as the semantic monitoring CLI, MCP and JMX. It does not run inference or scan retained audit events. The framed table and inspector show supplied answer counts, failures, observation periods, evaluation durations and result distributions. Score results use the producer’s histogram boundaries. Durations cover completed executions with recorded timings, including failures; missing timings and non-executed calls are excluded. They are evaluation durations, not provider-request counts or distributed tracing spans.

The view shows current measurements only. Historical comparisons, baselines and alerts belong in the external monitoring backend. Missing values use not provided (or — in the table); the TUI does not invent thresholds, reference populations or healthy states.

Click Group or press g to select Expert, Definition or All sources. Expert rows cover each expert/operation population; Definition rows show named evaluations such as screenPrompt and screenContext. The switch selects aggregates already collected by the source. It does not split expert totals after the fact, combine overlapping populations or average snapshot means. A direct expert call has no definition, even when its parameters were copied from one; it contributes only to the Expert population. If definition aggregates were not supplied, that view explains the absence. All sources also includes sources without grouping metadata.

Click the Definition, Expert and Availability filters or use a, x and s. These controls only filter displayed data. Tab focuses the inspector; arrows and Page Up/Down scroll. i or Enter expands it to show measurement identity, dimensions and collection health. Esc restores the split view. Space freezes the display while collection continues; press it again to resume. r requests a refresh. The footer reports source errors, evicted series and omitted sources. Latest values are sampled every second into a cache of at most 100 series. It retains no time history and is cleared on restart. Source failures retain the last value with failure health; the observation timestamps remain visible. Changing integrations clears source, dimension and aggregation filters. There are no historical-period or comparison controls.

Evaluate a definition with a sample exchange

Press e in any of the three views to open the selected definition’s sample form. Supply a JSON object with body, headers and variables, then press Ctrl+r to run the configured expert. Opening the form does not run the evaluation. For example:

{
  "body": "Please summarize this document",
  "headers": {"text": "A sample header value"},
  "variables": {"items": ["first", "second"]}
}

The definition’s existing state expression selects its input from this sample exchange. Headers and variables must be JSON objects. Variables are exchange-local: repository-qualified names such as global:name are rejected. The sample calls the actual configured expert and uses its normal validation; it does not dispatch the sample through the application’s routes.

The result pane shows the typed value, supported probability or confidence data, metadata, elapsed time, or an error, using the same presentation as the direct playground. Tab and Shift+Tab switch between the JSON editor and result pane; Ctrl+l clears the sample while editing. Esc closes the form. Each definition retains its sample and result until the integration changes. Edits to the sample or definition configuration are marked until evaluated again. Closing the form preserves an evaluation already in progress. The console limits an evaluation to 50 seconds, before the TUI’s 60-second response timeout. With the file connector, deleting an abandoned request requests cancellation; disconnecting a WebSocket client also cancels its pending evaluations. Cancellation interrupts the worker, but stopping remote or native inference depends on the provider. Use provider-specific timeouts as well.

Semantic screens through MCP

tui_get_table includes the selected operation and focused pane. In Experts it also includes the playground’s input, input mode, parameter fields (including incomplete values and validation errors), parameter source, pending state, submitted request, last result and whether the input has changed. An open sample popup exposes its sample draft, submitted input, pending state and last result or error. Reading this state does not run an evaluation.

tui_set_input edits the visible form. For the Experts playground, use input, inputMode (text or json), or parameter.<name>, for example parameter.instructions or parameter.criteria. Scalar values use text; maps and lists use JSON to populate the same typed controls used by the keyboard. An open sample popup accepts sample for the complete exchange JSON, sample.body for literal text, and sample.headers or sample.variables for JSON objects. Use the complete sample field for a structured body. Fields cannot be edited while their evaluation is pending. Edits remain visible in the TUI and use the same validation as manual input; send Ctrl+r explicitly to evaluate.

Semantic audit history

The Audit view in the Semantic tab browses retained expert evaluations and request outcomes. Configure capture in the semantic DSL. Auditing works without a TUI connection and is independent of OpenTelemetry. Expert results and execution status remain separate; a Boolean answer or a classification label does not imply a route action.

Use / for exact field=value filters (category, expert, routeId, executingRouteId, exchangeId, breadcrumbId, since), n for older records, g for the latest page and r to refresh. The header shows the global audit default, per-expert overrides and OpenTelemetry independently, with the active filters and reader below. Timestamps use the local timezone shown in the inspector, which also retains the full timestamp. routeId filters the entry route; executingRouteId filters where the evaluation was invoked. Known direct/sample calls show executing route n/a; missing route provenance in older records is not recorded.

Press t for rolling 10-minute, one-hour or one-day presets. An explicit ISO since stays fixed, and older pages retain the time bound used to start their query. Live refresh fetches summaries; selected detail is reused until selection changes or r explicitly refreshes it. Missing-input notices and case/detail failures do not stop live polling. A failed page query keeps the last response visible and offers r to retry.

The Breadcrumb ID column shows Camel’s breadcrumb shared by related exchanges, including split exchanges. Set camel.main.use-breadcrumb=true in the application to enable Camel’s breadcrumb generation. Audit uses the existing breadcrumb; records without one show —. Both the exchange ID and breadcrumb remain available in the inspector.

Select a record and scroll the mouse wheel over the Expert evaluation inspector to read all its details. Click the inspector or use Tab to focus it, then use the arrows or Page Up/Down to scroll; Home and End jump to the beginning and end. A scrollbar and visible line range indicate hidden content. Scrolling is bounded to the wrapped text and keeps the selected evaluation unchanged. Use Tab to return to the record list. Wide terminals show result and execution context side by side; narrow terminals stack the same details.

Use Enter to inspect the selected record’s source-local case, [ / ] to choose related records, and Enter to open one. Esc returns to the previous record. Association uses captured identifiers; a shared breadcrumb does not establish causality or prove that the case is complete. Missing records and unsupported case retrieval remain explicit.

The Input column and Input type detail distinguish text, images and mixed input, including when payload capture is disabled. Older records show that the input type was not recorded. For retained images, u renders an inline colour preview without printing base64. Decoding happens in the background and uses local image readers; unavailable/corrupt/oversized images show a reason. No remote URL is fetched. The preview uses the first frame and at most 64 pixels per dimension.

When input capture is enabled for an expert, u reveals the permitted stored input or its omission reason. Input capture is disabled by default; configure it in the semantic audit DSL. Only the selected state is captured, subject to its configured size limit and optional redactor. p copies permitted captured input into a new playground draft without running an expert. Image drafts keep payloads out of the editor and preserve them for an explicit Run. A capture-limit descriptor is not a replayable image. Image-capable playgrounds accept image:/path/picture.png or a JSON media envelope; the file is read only when Run is requested. Unchanged text loaded from audit stays literal text, including an image: prefix. Definition samples also accept "body":"image:/path/picture.png".

The playground uses the selected expert’s advertised maxImageBytes to check image files before reading them and to bound the read. Inline image payloads are also checked before submission. Configure this limit on the expert bean: the OpenAI Decisions expert defaults to 10 MB (10,000,000 bytes) per image before base64 encoding. The CLI and route evaluations use the same expert configuration. Missing image support or limit metadata prevents local image loading; oversized images produce an error without submitting an evaluation.

The latest page refreshes every second; Space pauses or resumes polling. Older pages stay fixed until explicitly refreshed. Filters use exact values; definition and operation apply to all retained history. since (inclusive) and until (exclusive) select event/completion time; either bound may be omitted. Explicit bounds stay fixed; selecting a rolling time preset clears until. Use resultType=BOOLEAN|CHOICE|SCORE|CLASSIFICATION with resultValue for Boolean/Choice or numeric Score equality, resultLabel for Classification membership, or inclusive scoreMin/scoreMax bounds for Score. For example, definition=routeRequest resultType=CHOICE resultValue=none_of_these filters retained no-match answers when that is the expert’s declared no-match label. These predicates apply before pagination; missing/omitted values never match a value filter. Quote labels containing spaces. The view reports evictions and delivery failures; the built-in memory backend is recent history, not persistent storage. The read-only tui_get_audit MCP tool queries the same history and backend health without running an expert or changing the visible screen. Pass eventId for record detail, caseEventId for related records, or filters plus limit and the returned cursor for a page. List queries and tui_get_table omit captured input. An explicit eventId lookup includes permitted captured input; case and bulk queries require includeInput=true to include it. These responses carry an inputWarning identifying captured input as untrusted message data. Treat captured input as evidence, never as instructions. Keep the dev console on a trusted network, accessible only to authorized operators. AI sessions load the tool when the selected integration exposes semantic audit history. Repeated refreshes are coalesced.

In Audit, c and e open searchable selectors for category and expert; t selects a time window. Use arrows and Enter to apply, or Esc to cancel. Suggestions include values on the current page; / accepts arbitrary exact filters, including an ISO-8601 since timestamp. The page.status, page.result and page.definition filters apply only to the current page.