Skip to main content

Overview

OpenSRE queries Temporal’s HTTP API to retrieve workflow executions, event history, task queue health, and namespace-level metrics — helping diagnose workflow failures, activity retries, and worker outages.
OpenSRE connects to Temporal’s HTTP API (the /api/v1/... REST interface served by the frontend service). This is a self-hosted server feature, enabled with the --http-port flag (dev server) or frontend.httpPort config.Temporal Cloud is not currently supported: Cloud exposes only gRPC/mTLS endpoints for workflow data and an HTTP Ops API for control-plane management — neither is the frontend HTTP API this integration uses. Point OpenSRE at a self-hosted Temporal deployment.

Prerequisites

  • A self-hosted Temporal Server with the HTTP API enabled
  • The HTTP API base URL (and an API key only if your deployment requires bearer auth)
Port 7233 is the gRPC frontend port and will not work as base_url — the HTTP API listens on a separate port. On the dev server it is set with --http-port (it otherwise defaults to a random free port). The examples below use 7243.

Setup

Option 1: Interactive CLI

Prompts for HTTP API base URL, namespace, and optional API key.

Option 2: Environment variables

Option 3: Persistent store

Credentials

Set base_url / TEMPORAL_API_URL to the frontend’s HTTP API endpoint. Leave api_key empty for unauthenticated clusters.

Quick local test with Docker

Confirm the HTTP API answers:
Verify:
A fresh namespace has no workflows, and temporal_namespace_info’s workflow_count: "0" on its own isn’t useful evidence. Run a real, deliberately failing workflow first:
Chat sessions only treat an integration as active once the store resolution has something to fall through to env vars with — an untouched ~/.opensre/integrations.json with an unrelated integration in it blocks env-var fallback entirely. Point OPENSRE_INTEGRATIONS_STORE_PATH at an empty, valid store instead, so your real config is never read or written and TEMPORAL_API_URL above is the only source of connection info:
A literal zero-byte file does not work here — the store loader expects valid JSON and raises on an empty read, so this writes an explicitly empty (but valid) store rather than just creating the file with mktemp alone. Now ask the agent about the failed workflow:
Ask: Why did the Temporal workflow payment-service-deploy-1 fail? Against this exact local workflow the agent calls all 4 registered tools — namespace info, workflow list, workflow history, and task queue — and finds the real cause: the deploy_payment_service activity raised RuntimeError('payment-service deploy failed: connection refused to billing-api') and, with maximumAttempts=1, the failure propagated straight to WORKFLOW_EXECUTION_FAILED. An empty store makes the session fall through to env-var resolution for every integration, not just Temporal — if your shell already resolves another integration from its own env vars, it rides along too (harmless). Teardown:

Tools

Typical flow when you ask about a failed workflow

  1. Namespace info — how many workflows are running vs failed?
  2. Workflows — filter to failed/timed-out executions; note workflow type and task queue
  3. Workflow history — which activity failed and why?
  4. Task queue — are workers polling? Is backlog growing?

Verify

Verify probes GET /api/v1/namespaces/{namespace}.

Troubleshooting

Security

  • Use a read-only API key where your deployment supports scoped auth — OpenSRE never writes to Temporal.
  • Restrict network access to the HTTP API to trusted IPs.
  • Store credentials in ~/.opensre/integrations.json or environment variables, not in source code.