Tempurview
A CLI and TUI for viewing and managing Temporal workflows.
Tempurview gives you two interfaces to your Temporal cluster:
- CLI — scriptable commands for listing, inspecting, and acting on workflows. Outputs JSON (for pipes) or tables (for humans).
- TUI — an interactive terminal UI with real-time navigation, filtering, sorting, and operational insights.
Both interfaces share the same configuration and connect to Temporal via gRPC.
Quick start
cargo install tempurview
Connect to your cluster:
export TEMPORAL_ADDRESS="your-namespace.tmprl.cloud:7233"
export TEMPORAL_NAMESPACE="your-namespace"
export TEMPORAL_API_KEY="your-api-key"
# Launch the TUI
tpv
# Or use the CLI
tpv workflow list
tpv workflow get <workflow-id>
tpv insight scan --since 24h
Try it with mock data (no Temporal connection needed):
tpv --mock
Installation
From crates.io
cargo install tempurview
This installs two binaries: tempurview and tpv (short alias).
From source
git clone https://github.com/Tatch-AI/tempurview.git
cd tempurview
cargo install --path .
Verify
tpv --version
tpv test-connection
Configuration
Tempurview reads configuration from CLI flags, connection profiles, environment variables, and an optional config file.
Resolution priority
Connection parameters are resolved in this order (first wins):
- CLI flags
--address/--namespace— always win - Profile via
--profile <name>orTEMPURVIEW_PROFILEenv var - Default profile from
default_profilein config.toml - Environment variables
TEMPORAL_ADDRESS/TEMPORAL_NAMESPACE/TEMPORAL_API_KEY - Hard-coded defaults (
localhost:7233,default, no API key)
When a profile is active, bare env vars (TEMPORAL_ADDRESS, etc.) do not override it. Only explicit --address/--namespace CLI flags win over a profile.
Connection profiles
Profiles let you save named connection targets in ~/.tempurview/config.toml and switch between them:
# Add profiles
tpv config profile-add local --address localhost:7233 --namespace default
tpv config profile-add cloud --address us-west1.gcp.api.temporal.io:7233 --namespace my-ns --api-key tctl_xxx
# List profiles
tpv config profile-list
# Set a default
tpv config set-default cloud
# Use a specific profile
tpv -p local workflow list # CLI with local profile
tpv -p cloud # TUI with cloud profile
TEMPURVIEW_PROFILE=local tpv # env var selection
# Override a profile's address
tpv -p local --address custom:9999 config show
The first profile added is automatically set as the default.
Config file format
default_profile = "cloud"
[profiles.cloud]
address = "us-west1.gcp.api.temporal.io:7233"
namespace = "my-namespace.abc123"
api_key = "tctl_..."
[profiles.local]
address = "localhost:7233"
namespace = "default"
# no api_key needed for local
[insights]
allowlist = ["expected error"]
concurrency = 50
Environment variables
| Variable | Description | Default |
|---|---|---|
TEMPORAL_ADDRESS | Temporal server gRPC address | localhost:7233 |
TEMPORAL_NAMESPACE | Temporal namespace | default |
TEMPORAL_API_KEY | API key (Temporal Cloud) | — |
TEMPURVIEW_PROFILE | Connection profile to use | — |
TEMPORAL_TUI_REFRESH_INTERVAL | Auto-refresh interval in seconds | 30 |
TEMPORAL_TUI_DEFAULT_LIMIT | Max workflows to fetch | 50 |
TEMPORAL_TUI_TICK_RATE | TUI tick rate in milliseconds | 250 |
You can also place these in a .env file in your working directory.
CLI flags
These override environment variables and profiles when provided:
tpv --address my-cluster:7233 --namespace production --limit 100
| Flag | Description |
|---|---|
--profile <NAME> / -p <NAME> | Connection profile to use |
--address <ADDR> | Temporal server address (overrides profile) |
--namespace <NS> | Temporal namespace (overrides profile) |
--mock | Use mock data (no connection needed) |
--mock-count <N> | Number of mock workflows (default: 100) |
--limit <N> | Max workflows to fetch (default: 50) |
--output <FORMAT> | Output format: json or table (auto-detected) |
--logs | Show log file location and recent errors |
Config file
Tempurview reads ~/.tempurview/config.toml for profiles and additional settings.
[insights]
# Allowlist of workflow types to include in insight scans.
# If empty, all workflow types are scanned.
allowlist = ["OrderWorkflow", "PaymentWorkflow"]
concurrency = 50
CLI Overview
Run tpv (or tempurview) with a subcommand to use the CLI. Without a subcommand, the interactive TUI launches instead.
tpv <command> [options]
Commands
| Command | Description |
|---|---|
workflow list | List workflows with optional filters |
workflow get <id> | Get details of a specific workflow |
workflow count | Count workflows matching a filter |
workflow cancel <id> | Cancel a running workflow |
workflow terminate <id> | Terminate a workflow |
activity list <id> | List activities for a workflow |
event list <id> | List history events for a workflow |
insight scan | Scan workflows for operational insights |
config show | Show resolved configuration |
config profile-add <name> | Add a connection profile |
config profile-list | List all connection profiles |
config profile-remove <name> | Remove a connection profile |
config set-default <name> | Set the default profile |
test-connection | Test connection to Temporal server |
Output format
By default, output is auto-detected:
- Table when writing to a terminal (TTY)
- JSON when piped to another command
Override with --output json or --output table.
# Table output (default in terminal)
tpv workflow list
# JSON for scripting
tpv workflow list --output json
# Or just pipe it
tpv workflow list | jq '.[] | .workflow_id'
Workflows
List workflows
tpv workflow list [--status <STATUS>] [--workflow-type <TYPE>] [--since <TIME>] [--before <TIME>]
Filters
| Flag | Description | Example |
|---|---|---|
--status | Filter by execution status | Running, Completed, Failed |
--workflow-type | Filter by workflow type name | OrderWorkflow |
--since | Workflows started after this time | 2h, 3d, 2024-01-15 |
--before | Workflows started before this time | 1h, 2024-12-01 |
# Running workflows from the last 24 hours
tpv workflow list --status Running --since 24h
# All failed workflows of a specific type
tpv workflow list --status Failed --workflow-type PaymentWorkflow
Get workflow details
tpv workflow get <workflow-id> [--run-id <RUN_ID>]
If --run-id is omitted, the latest run is returned.
Count workflows
tpv workflow count [--status <STATUS>] [--query <QUERY>]
The --query flag accepts raw Temporal visibility queries.
Cancel a workflow
tpv workflow cancel <workflow-id> [--run-id <RUN_ID>]
Terminate a workflow
tpv workflow terminate <workflow-id> [--run-id <RUN_ID>] [--reason <REASON>]
The default reason is "Terminated via CLI".
Activities & Events
List activities
tpv activity list <workflow-id> [--run-id <RUN_ID>]
Shows all activities for a workflow execution, including status, type, attempt count, and timing.
List history events
tpv event list <workflow-id> [--run-id <RUN_ID>]
Shows the full event history for a workflow execution. Each event includes its type, timestamp, and event ID.
Insights
The insight scan command analyzes workflows for operational patterns and potential issues.
tpv insight scan [--since <TIME>] [--before <TIME>]
What it scans for
Tempurview runs 7 finding algorithms across your workflows:
List-level findings
- High failure rate — workflow types with an unusually high proportion of failures
- Repeated failures — the same workflow type failing repeatedly in a short window
- Long-running workflows — executions that have been running significantly longer than peers
Activity-level findings
- Retry storms — activities with a high number of retry attempts
- Slow activities — activities taking significantly longer than expected
- Repeated activity failures — the same activity failing across multiple workflows
- Timeout patterns — activities consistently hitting timeout limits
Examples
# Scan the last 24 hours
tpv insight scan --since 24h
# Scan a specific date range
tpv insight scan --since 2024-01-15 --before 2024-01-16
TUI Overview
Launch the interactive TUI by running tpv without a subcommand:
tpv
The TUI provides a navigable, real-time interface to your Temporal cluster. It follows vim-style keybindings throughout.
Views
The TUI has several interconnected views:
- Workflow List — the main view. Lists workflows with status, type, ID, and timing. Supports filtering, sorting, and date range selection.
- Workflow Detail — detailed info for a single workflow including input/output payloads, failure messages, and metadata.
- Activity List — activities for a workflow, with status and timing.
- Activity Detail — full JSON detail of a single activity with syntax highlighting and search.
- Event Log — the complete history event table for a workflow.
- Event Detail — full JSON detail of a single event with syntax highlighting and search.
- Type List — workflow types with counts broken down by status.
- Insights — operational findings from scanning workflows.
- Insight Detail — full detail of a single finding with affected entities, trigger term highlighting, and drill-through to workflows.
Navigation model
Views are arranged as a stack. Enter pushes a detail view, Esc pops back. The typical flow:
Workflow List → Workflow Detail → Activity List → Activity Detail
│
├──→ Event Log → Event Detail
│
Workflow List → Type List
│
Workflow List → Insights → Insight Detail → Workflow Detail
Navigation
Movement
All list views use the same movement keys:
| Key | Action |
|---|---|
j / ↓ | Move down |
k / ↑ | Move up |
g / Home | Go to top |
G / End | Go to bottom |
Ctrl+D | Half-page down |
Ctrl+U | Half-page up |
PgUp / PgDn | Full page up/down |
View transitions
| Key | Action |
|---|---|
Enter | Select / drill into detail |
Esc | Go back to previous view |
q | Quit (press twice to confirm) |
Ctrl+C | Quit (press twice to confirm) |
Filtering
From the Workflow List:
| Key | Action |
|---|---|
/ | Open text filter input |
1 | Filter: Running |
2 | Filter: Completed |
3 | Filter: Failed |
4 | Filter: Canceled |
5 | Filter: Terminated |
6 | Filter: TimedOut |
7 | Filter: ContinuedAsNew |
] / [ | Next / previous status filter |
0 | Clear all filters |
Date range
| Key | Action |
|---|---|
d | Enter date range mode |
1-6 | Preset: 1h / 6h / 24h / 3d / 7d / 30d |
0 | Clear date range |
c | Custom input (e.g., 2h, 3d, 1w) |
Sorting
| Key | Action |
|---|---|
s | Enter sort mode |
Then in Workflow List: s (status), t (type), w (workflow ID), d (date).
In Type List: t (type), n (total count), 1-7 (status column).
Views
Workflow List
The main view. Shows workflows in a scrollable table with columns for status, type, workflow ID, and start time.
Key actions:
T— switch to Type List viewI— run an Insights scanr— refresh datad— date range filters— sort modeF1-F4— toggle column visibility (Status, Type, Workflow ID, Started)
Workflow Detail
Shows full details for a selected workflow: status, type, task queue, input/output payloads, failure info, timing, and metadata.
Key actions:
a— view activitiesl— view event logx— copy workflow URL to clipboardgx— open workflow in browserc— cancel workflowt— terminate workflow
Activity List
Lists activities for a workflow with status, type, attempt count, and timing.
Key actions:
Enter— expand to Activity Detail
Activity Detail
Full-screen scrollable JSON view of an activity with syntax highlighting.
Key actions:
/— search within JSONn/N— next / previous search match
Event Log
History events for a workflow in a table view, showing event type, timestamp, and event ID.
Key actions:
Enter— expand to Event Detail
Event Detail
Full-screen scrollable JSON view of a history event with syntax highlighting.
Key actions:
/— search within JSONn/N— next / previous search match
Type List
Workflow types with execution counts broken down by status. Selecting a type filters the Workflow List.
Insights
Operational findings from scanning workflows. Shows a list of findings with severity and description.
Key actions:
r— re-scanEnter— expand to Insight Detail
Insight Detail
Full detail of a finding. Shows description, affected entities with trigger term highlighting, and links to individual workflows.
Key actions:
n/p— next / previous affected entityEnter— drill into workflow detail
Keybindings
Complete keybinding reference for all TUI views and modes.
Global
| Key | Action |
|---|---|
? | Toggle help overlay |
q | Quit (press twice) |
Ctrl+C | Quit (press twice) |
All list views
| Key | Action |
|---|---|
j / ↓ | Move down |
k / ↑ | Move up |
g / Home | Go to top |
G / End | Go to bottom |
Ctrl+D | Half-page down |
Ctrl+U | Half-page up |
PgUp / PgDn | Full page up/down |
Enter | Select / view details |
Esc | Go back |
r | Refresh data |
Workflow List
| Key | Action |
|---|---|
/ | Open text filter |
1-7 | Filter by status |
] / [ | Cycle status filter |
0 | Clear all filters |
d | Date range mode |
s | Sort mode |
T | Type List view |
I | Insights scan |
F1-F4 | Toggle columns |
Workflow Detail
| Key | Action |
|---|---|
a | View activities |
l | View event log |
x | Copy workflow URL |
gx | Open in browser |
c | Cancel workflow |
t | Terminate workflow |
Detail views (Activity, Event, Insight)
| Key | Action |
|---|---|
j / k | Scroll line by line |
Ctrl+D / Ctrl+U | Half-page scroll |
g / G | Top / bottom |
/ | Search in content |
n / N | Next / previous match |
Insight Detail (additional)
| Key | Action |
|---|---|
n / p | Next / previous affected entity |
Enter | Drill into workflow detail |
Input modes
Filter / Search input
| Key | Action |
|---|---|
Enter | Apply |
Esc | Cancel |
Date range selection
| Key | Action |
|---|---|
1-6 | Preset (1h/6h/24h/3d/7d/30d) |
0 | Clear |
c | Custom input |
Esc | Cancel |
Sort selection (Workflow List)
| Key | Action |
|---|---|
s | Sort by status |
t | Sort by type |
w | Sort by workflow ID |
d | Sort by date |
Esc | Cancel |
Sort selection (Type List)
| Key | Action |
|---|---|
t | Sort by type |
n | Sort by total count |
1-7 | Sort by status column |
Esc | Cancel |