| name | temporal-cli |
| description | Master Temporal CLI workflow management with smart query building, payload decoding, and history filtering using temporal, base64, and jq |
| version | 1.0.0 |
Temporal CLI Skill
Execute Temporal CLI commands with smart patterns for workflow management. This skill provides comprehensive knowledge for using Temporal CLI v1.5.1 effectively with base64 and jq.
Prerequisites
- Temporal CLI v1.5.1+ installed and available in PATH
- Configured environments in
~/.config/temporalio/temporal.yaml - base64 command-line tool (standard on most systems)
- jq JSON processor for parsing and filtering
Core Command Pattern
ALL Temporal CLI commands follow this base pattern:
temporal --env <environment> -o json --time-format iso workflow <operation> [args...]
Global flags (ALWAYS used):
--env <env>- Temporal environment from config-o json- JSON output format--time-format iso- ISO 8601 timestamps
Quick Reference
Essential Operations
| Operation | Reference Guide | Use Case |
|---|---|---|
| list workflows | Command Patterns | Find workflows by query |
| count workflows | Command Patterns | Get result scope before listing |
| describe workflow | Command Patterns | Get current workflow state |
| show history | Command Patterns | View execution events |
| start workflow | Command Patterns | Create new execution |
| signal workflow | Command Patterns | Send signal to running workflow |
| query workflow | Command Patterns | Query workflow state |
| cancel workflow | Command Patterns | Request cancellation |
| terminate workflow | Command Patterns | Force termination |
| reset workflow | Command Patterns | Reset execution to previous point |
| stack trace | Command Patterns | Get workflow stack trace |
Knowledge Guides
| Guide | Purpose |
|---|---|
| Query Construction | Complete query syntax with 50+ examples |
| Custom Search Attributes | Using custom fields in queries |
| Payload Decoding | Base64/jq recipes for history payloads |
| History Filtering | jq patterns for managing large histories |
| Smart Patterns | Count-first, auto-retry, validation logic |
| Error Handling | Common errors and recovery |
| Safety Checks | Validation for destructive operations |
Progressive Disclosure Strategy
- Start here - Read this SKILL.md for overview
- Need specific command? - Check Command Patterns
- Building queries? - See Query Construction
- Large history? - Use History Filtering
- Custom attributes? - Review Custom Search Attributes
- Hit errors? - Consult Error Handling
- Destructive ops? - Verify Safety Checks
Key Principles
1. Always Count Before Listing
# Get count first to understand scope
COUNT=$(temporal --env prod -o json --time-format iso workflow count \
--query "ExecutionStatus = 'Failed'" | jq '.count')
# Then list with appropriate limit
temporal --env prod -o json --time-format iso workflow list \
--query "ExecutionStatus = 'Failed'" \
--limit ${COUNT}
2. Filter Large Histories
Histories with 100+ events should be filtered:
# Use jq to show only failures
temporal --env prod -o json --time-format iso workflow show \
--workflow-id "my-workflow" | \
jq '.events[] | select(.eventType | contains("Failed"))'
See History Filtering for more patterns.
3. Validate Queries First
Pre-validate queries before execution to avoid errors:
# Check for unsupported LIKE operator
if echo "$QUERY" | grep -qi 'LIKE'; then
echo "ERROR: Use STARTS_WITH instead of LIKE"
exit 1
fi
See Smart Patterns for validation logic.
4. Decode Payloads Carefully
Workflow event payloads are base64-encoded:
# Decode workflow input
temporal --env prod -o json --time-format iso workflow show \
--workflow-id "my-workflow" | \
jq -r '.events[0].workflowExecutionStartedEventAttributes.input.payloads[0].data' | \
base64 -d | \
jq '.'
See Payload Decoding for complete recipes.
Common Workflows
Find Failed Workflows
# Count failures
temporal --env prod -o json --time-format iso workflow count \
--query "ExecutionStatus = 'Failed'"
# List failed workflows
temporal --env prod -o json --time-format iso workflow list \
--query "ExecutionStatus = 'Failed'" \
--limit 10
Find Non-Deterministic / Problematic Workflows
IMPORTANT: Workflows with non-deterministic errors often remain in Running status, not Failed. Use TemporalReportedProblems to find them:
# Find running workflows with WorkflowTask failures (includes non-deterministic errors)
temporal --env prod -o json --time-format iso workflow list \
--query "ExecutionStatus = 'Running' AND TemporalReportedProblems IN ('category=WorkflowTaskFailed', 'category=WorkflowTaskTimedOut')" \
--limit 20
# Count problematic workflows
temporal --env prod -o json --time-format iso workflow count \
--query "ExecutionStatus = 'Running' AND TemporalReportedProblems IN ('category=WorkflowTaskFailed')"
TemporalReportedProblems values:
category=WorkflowTaskFailed- WorkflowTask failed (includes non-deterministic errors)category=WorkflowTaskTimedOut- WorkflowTask timed outcause=WorkflowTaskFailedCauseNonDeterministicError- Specifically non-deterministic errors
Get failure details from history:
# Get the last WorkflowTaskFailed event with full error message
temporal --env prod -o json --time-format iso workflow show \
--workflow-id "my-workflow" | \
jq '[.events[] | select(.eventType == "EVENT_TYPE_WORKFLOW_TASK_FAILED")] | .[-1]'
Debug Stuck Workflow
# Get stack trace
temporal --env prod -o json --time-format iso workflow stack \
--workflow-id "stuck-workflow-123"
# Check history for patterns
temporal --env prod -o json --time-format iso workflow show \
--workflow-id "stuck-workflow-123" | \
jq '[.events[] | .eventType] | group_by(.) | map({type: .[0], count: length})'
Customer-Specific Workflows
# Using custom search attribute
temporal --env prod -o json --time-format iso workflow list \
--query "CustomerId = 'customer-abc-123'" \
--limit 20
Safety First
Before destructive operations (terminate, reset):
- Double-check workflow ID
- ALWAYS provide
--reason - For batch operations, count affected workflows first
- Review Safety Checks
Quick Examples
List Workflows by Type
temporal --env staging -o json --time-format iso workflow list \
--query "WorkflowType = 'OnboardingFlow'" \
--limit 10
Start New Workflow
temporal --env staging -o json --time-format iso workflow start \
--type "OnboardingFlow" \
--task-queue "patient-workflows" \
--workflow-id "patient-onboard-$(date +%s)" \
--input '{"customerId": "cust-123"}'
Signal Workflow
temporal --env prod -o json --time-format iso workflow signal \
--workflow-id "order-processing-456" \
--name "approvalReceived" \
--input '{"approved": true}'
Asset Templates
Pre-built templates available in assets/:
query-templates.json- Common query patternsjq-filters.json- Reusable jq filtersevent-types.json- Event type reference
Getting Started
- Verify Temporal CLI is installed:
temporal --version - Check environment configuration:
cat ~/.config/temporalio/temporal.yaml - Try counting workflows:
temporal --env staging -o json --time-format iso workflow count - Explore Command Patterns for detailed examples
When Things Go Wrong
- Query syntax error? → Check Query Construction
- Unknown operator? → See Error Handling
- Empty results? → Try WorkflowId fallback in Smart Patterns
- Large history overwhelming? → Use History Filtering
- Non-deterministic errors? → Use
TemporalReportedProblemsquery (see above) or Error Handling
Next Steps
Start with Command Patterns for complete bash examples of all operations.