IBM watsonx.governance
Also available in Japanese.
watsonx.governance has no native OpenTelemetry intake for external agents. IBM’s route for
agent observability is its Langfuse and Arize integrations, and watsonx Orchestrate accepts
OTLP/HTTP traces from external agents. Kurahi therefore exports its runs as OpenTelemetry spans
with the attribute names Langfuse maps, through the existing diagnostics-otel plugin:
- to a Langfuse (or Arize, or any OTLP) endpoint that the governance integration reads, and
- optionally, to the Orchestrate trace intake, so runs appear next to Orchestrate’s own traces.
Status: Available. Attribute names follow the Langfuse OpenTelemetry documentation and the Orchestrate trace-intake documentation; see References.
What is exported
Section titled “What is exported”Two span kinds, one span per finished run:
| Span | When | Langfuse observation type |
|---|---|---|
kurahi.agent.run |
every embedded agent run (channels, A2A, sessions) | agent |
kurahi.autopilot.run |
every autopilot routine run | chain |
By default a span carries ids, timings, decisions and counts only:
langfuse.trace.name,langfuse.session.id(the session id, orautopilot:<project>:<routine>),langfuse.user.id(defaultusr_kurahi),langfuse.observation.level(ERRORon failure,WARNINGfor an escalated or watchdog-held autopilot run).- Agent runs:
gen_ai.system(provider),gen_ai.request.model,gen_ai.usage.input_tokens,gen_ai.usage.output_tokens,langfuse.observation.usage_details, and metadata: run, agent, job and lane ids, outcome (completed,error,aborted,timeout), error kind, steps, tool calls, duration. - Autopilot runs: project, routine, edition, area, autonomy level, trigger, status, reasoner
backend and model and time, gather call count, work items created, decision counts
(
decision_allow,decision_needs_person,decision_refuse,decision_allow_failed), run counts, watchdog verdict, and the run’s evidence root hash, which ties the span to the signed run evidence kept in Kurahi.
Never exported: prompts, replies, gathered data, tool arguments or results, error messages, and
names of people. Content is attached only when an administrator sets
diagnostics.otel.captureContent: true; then the agent run span also gets
langfuse.observation.input / output (and input / output), truncated to
maxContentChars (default 4000). Autopilot spans never carry content.
Configure (Langfuse)
Section titled “Configure (Langfuse)”{ plugins: { entries: { "diagnostics-otel": { enabled: true } } }, diagnostics: { enabled: true, otel: { enabled: true, endpoint: "https://langfuse.example.com/api/public/otel", // traces go to /v1/traces headers: { Authorization: { $secret: "langfuse-otlp-basic" }, // "Basic <base64 public:secret>" }, traces: true, metrics: false, // Langfuse accepts traces only // captureContent: false, // the default; turn on only with a documented reason }, },}Store the header value with kurahi secrets set langfuse-otlp-basic. Connect the Langfuse
project to watsonx.governance as IBM describes for its Langfuse integration.
Push to the watsonx Orchestrate trace intake
Section titled “Push to the watsonx Orchestrate trace intake”{ diagnostics: { enabled: true, otel: { enabled: true, orchestrate: { enabled: true, url: "https://<orchestrate-host>/instances/<instance-id>/v1/orchestrate/inject/traces", apiKey: { $secret: "orchestrate-api-key" }, // IBM Cloud API key tenantId: "<tenant id>", environment: "draft", // deployment.environment agentId: "<orchestrate agent id>", // agent.id on every span // auth: "api-key", // legacy: key in x-api-key instead of an IAM bearer // userId: "usr_kurahi", }, }, },}- The push has its own tracer: only
kurahi.agent.runandkurahi.autopilot.runreach it. - The API key is exchanged at IBM Cloud IAM for a bearer token, cached and refreshed before it
expires (
iamUrloverrides the token endpoint). - The resource carries
tenant.idanddeployment.environment, which the intake routes on; the spans carryagent.id,langfuse.session.idandlangfuse.user.id, which it requires. - The URL must be https and of the documented shape; anything else turns the push off with a warning in the gateway log.
References
Section titled “References”| Item | Source |
|---|---|
| Langfuse and Arize integrations in watsonx.governance | IBM announcement |
| No native OTel intake for external agents | IBM idea WGOV-I-268 |
| Langfuse attribute names, OTLP endpoint, Basic auth | Langfuse OpenTelemetry |
Orchestrate trace intake URL, IAM or x-api-key, tenant.id, deployment.environment, agent.id, langfuse.session.id, langfuse.user.id |
Orchestrate OTel export |
| External models evaluated through detached prompt templates (register Kurahi agents manually) | Detached prompt evaluation |
Overview of the pack: IBM watsonx. Other span and metric names: Logging.