From 40307f53467905cba787186c3ecbd8432769528a Mon Sep 17 00:00:00 2001 From: Greg Travis Date: Fri, 5 Jun 2026 14:06:07 -0400 Subject: [PATCH 1/3] mdx file --- docs/develop/ruby/activities/index.mdx | 1 + .../ruby/activities/standalone-activities.mdx | 407 ++++++++++++++++++ docs/develop/ruby/index.mdx | 1 + .../activities/standalone-activity.mdx | 1 + sidebars.js | 1 + 5 files changed, 411 insertions(+) create mode 100644 docs/develop/ruby/activities/standalone-activities.mdx diff --git a/docs/develop/ruby/activities/index.mdx b/docs/develop/ruby/activities/index.mdx index f95b38d427..661ad8e357 100644 --- a/docs/develop/ruby/activities/index.mdx +++ b/docs/develop/ruby/activities/index.mdx @@ -19,6 +19,7 @@ import * as Components from '@site/src/components'; - [Activity basics](/develop/ruby/activities/basics) - [Activity execution](/develop/ruby/activities/execution) +- [Standalone Activities](/develop/ruby/activities/standalone-activities) - [Timeouts](/develop/ruby/activities/timeouts) - [Asynchronous Activity completion](/develop/ruby/activities/asynchronous-activity) - [Dynamic Activity](/develop/ruby/activities/dynamic-activity) diff --git a/docs/develop/ruby/activities/standalone-activities.mdx b/docs/develop/ruby/activities/standalone-activities.mdx new file mode 100644 index 0000000000..8dc155b5cc --- /dev/null +++ b/docs/develop/ruby/activities/standalone-activities.mdx @@ -0,0 +1,407 @@ +--- +id: standalone-activities +title: Standalone Activities - Ruby SDK +sidebar_label: Standalone Activities +toc_max_heading_level: 4 +keywords: + - standalone activity + - activity execution + - execute activity + - activity handle + - list activities + - count activities + - ruby sdk +tags: + - Activities + - Temporal Client + - Ruby SDK + - Temporal SDKs +description: Execute Activities independently without a Workflow using the Temporal Ruby SDK. +--- + +:::tip SUPPORT, STABILITY, and DEPENDENCY INFO + +Temporal Ruby SDK support for [Standalone Activities](/standalone-activity) is at +[Pre-release](/evaluate/development-production-features/release-stages#pre-release). + +::: + +Standalone Activities are Activities that run independently, without being orchestrated by a +Workflow. Instead of starting an Activity from within a Workflow Definition, you start a Standalone +Activity directly from a [`Temporalio::Client`](https://github.com/temporalio/sdk-ruby). + +The way you write the Activity and register it with a Worker is identical to [Workflow +Activities](/develop/ruby/activities/basics). The only difference is that you execute a Standalone +Activity directly from your Temporal Client. + +This page covers the following: + +- [Get Started with Standalone Activities](#get-started) +- [Define your Activity](#define-activity) +- [Run a Worker with the Activity registered](#run-worker) +- [Execute a Standalone Activity](#execute-activity) +- [Start a Standalone Activity without waiting for the result](#start-activity) +- [Get a handle to an existing Standalone Activity](#get-activity-handle) +- [Wait for the result of a Standalone Activity](#get-activity-result) +- [List Standalone Activities](#list-activities) +- [Count Standalone Activities](#count-activities) +- [Run Standalone Activities with Temporal Cloud](#run-standalone-activities-temporal-cloud) + +:::note + +This documentation uses source code from the +[standalone_activity](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity) +sample. + +::: + +## Get Started with Standalone Activities {/* #get-started */} + +Prerequisites: + +- **Ruby** 3.3+ + +- **Temporal Ruby SDK** (v1.5.0 or higher). See the [Ruby Quickstart](/develop/ruby/set-up-local-ruby) for + install instructions. + +- **Temporal CLI** v1.7.0 or higher + + Install with Homebrew: + + ```bash + brew install temporal + ``` + + Or see the [Temporal CLI install guide](/cli#install) for other platforms. + + Verify the installation: + + ```bash + temporal --version + ``` + +Start the Temporal development server: + +``` +temporal server start-dev +``` + +This command automatically starts the Temporal development server with the Web UI, and creates the `default` Namespace. +It uses an in-memory database, so do not use it for real use cases. + + +:::info Temporal Cloud + +All code samples on this page use +[`Temporalio::EnvConfig::ClientConfig.load_client_connect_options`](https://github.com/temporalio/sdk-ruby) +to configure the Temporal Client connection. It responds to [environment +variables](/references/client-environment-configuration) and [TOML configuration +files](/references/client-environment-configuration), so the same code works against a local dev +server and Temporal Cloud without changes. See [Run Standalone Activities with Temporal +Cloud](#run-standalone-activities-temporal-cloud) below. + +::: + +The Temporal Server will now be available for client connections on `localhost:7233`, and the +Temporal Web UI will now be accessible at [http://localhost:8233](http://localhost:8233). Standalone +Activities are available from the nav bar item located towards the top left of the page: + +Standalone Activities Web UI nav bar item + +Clone the [samples-ruby](https://github.com/temporalio/samples-ruby) repository to follow along: + +```bash +git clone https://github.com/temporalio/samples-ruby.git +cd samples-ruby +bundle install +``` + +The sample consists of separate programs in the `standalone_activity` directory: + +``` +standalone_activity/ +├── my_activities.rb # Activity definition +├── worker.rb # Worker that processes activity tasks +├── execute_activity.rb # Starts an activity and waits for the result +├── start_activity.rb # Starts an activity without blocking +├── list_activities.rb # Lists activity executions +└── count_activities.rb # Counts activity executions +``` + +## Define your Activity {/* #define-activity */} + +An Activity in the Temporal Ruby SDK is a subclass of `Temporalio::Activity::Definition` that +implements an `execute` method. The way you define a Standalone Activity is identical to how you +define an Activity orchestrated by a Workflow. In fact, the same Activity can be executed both as a +Standalone Activity and as a Workflow Activity. + +[my_activities.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/my_activities.rb) + +```ruby +require 'temporalio/activity' + +module StandaloneActivity + module MyActivities + class ComposeGreeting < Temporalio::Activity::Definition + def execute(greeting, name) + "#{greeting}, #{name}!" + end + end + end +end +``` + +## Run a Worker with the Activity registered {/* #run-worker */} + +Running a Worker for Standalone Activities is the same as running a Worker for Workflow Activities — +you create a `Temporalio::Worker`, register the Activity class, and call `worker.run`. The Worker +doesn't need to know whether the Activity will be invoked from a Workflow or as a Standalone +Activity. See [How to run a Worker](/develop/ruby/workers/run-worker-process) for more details on +Worker setup and configuration options. + +[worker.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/worker.rb) + +```ruby +args, kwargs = Temporalio::EnvConfig::ClientConfig.load_client_connect_options +args[0] ||= 'localhost:7233' +args[1] ||= 'default' + +client = Temporalio::Client.connect(*args, **kwargs) + +worker = Temporalio::Worker.new( + client:, + task_queue: 'standalone-activity-sample', + activities: [StandaloneActivity::MyActivities::ComposeGreeting] +) + +puts 'Starting worker (ctrl+c to exit)' +worker.run(shutdown_signals: ['SIGINT']) +``` + +Open a new terminal, navigate to the `samples-ruby` directory, and run the Worker: + +```bash +bundle exec ruby standalone_activity/worker.rb +``` + +Leave this terminal running — the Worker needs to stay up to process activities. + +## Execute a Standalone Activity {/* #execute-activity */} + +Use [`Temporalio::Client#execute_activity`](https://github.com/temporalio/sdk-ruby) to execute a +Standalone Activity and block until it completes. Call this from your application code, not from +inside a Workflow Definition. This durably enqueues your Standalone Activity in the Temporal Server, +waits for it to be executed on your Worker, and then returns the result. + +[execute_activity.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/execute_activity.rb) + +```ruby +result = client.execute_activity( + StandaloneActivity::MyActivities::ComposeGreeting, + 'Hello', 'World', + id: 'standalone-activity-id', + task_queue: 'standalone-activity-sample', + start_to_close_timeout: 10 +) +puts "Activity result: #{result}" +``` + +The first argument is the Activity to run. It can be the `Activity::Definition` subclass, an +instance of one, or a string/symbol name. Positional arguments after it are passed to the Activity's +`execute` method. The call requires `id`, `task_queue`, and at least one of `start_to_close_timeout` +or `schedule_to_close_timeout`. + +To run it: + +1. Make sure the Temporal Server is running (from the [Get Started](#get-started) step above). +2. Make sure the Worker is running (from the [Run a Worker](#run-worker) step above). +3. Open a new terminal, navigate to the `samples-ruby` directory, and run: + +```bash +bundle exec ruby standalone_activity/execute_activity.rb +``` + +Or use the Temporal CLI: + +```bash +temporal activity execute \ + --type ComposeGreeting \ + --activity-id standalone-activity-id \ + --task-queue standalone-activity-sample \ + --start-to-close-timeout 10s \ + --input '"Hello"' \ + --input '"World"' +``` + +## Start a Standalone Activity without waiting for the result {/* #start-activity */} + +Starting a Standalone Activity means sending a request to the Temporal Server to durably enqueue +your Activity job, without waiting for it to be executed by your Worker. + +Use [`Temporalio::Client#start_activity`](https://github.com/temporalio/sdk-ruby) to start a +Standalone Activity and get a handle without waiting for the result: + +[start_activity.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/start_activity.rb) + +```ruby +handle = client.start_activity( + StandaloneActivity::MyActivities::ComposeGreeting, + 'Hello', 'World', + id: 'standalone-activity-id', + task_queue: 'standalone-activity-sample', + start_to_close_timeout: 10 +) +puts "Started Activity with id=#{handle.id} run_id=#{handle.run_id}" + +# Wait for the result later +puts "Activity result: #{handle.result}" +``` + +With the Temporal Server and Worker running, open a new terminal in the `samples-ruby` directory and +run: + +```bash +bundle exec ruby standalone_activity/start_activity.rb +``` + +Or use the Temporal CLI: + +```bash +temporal activity start \ + --type ComposeGreeting \ + --activity-id standalone-activity-id \ + --task-queue standalone-activity-sample \ + --start-to-close-timeout 10s \ + --input '"Hello"' \ + --input '"World"' +``` + +## Get a handle to an existing Standalone Activity {/* #get-activity-handle */} + +Use `client.activity_handle` to create a handle to a previously started Standalone Activity: + +```ruby +handle = client.activity_handle('standalone-activity-id') +``` + +Pass no run ID (the default) to target the latest run of the given Activity ID, or pass +`activity_run_id:` to target a specific run. You can then use the handle to wait for the result, +describe, cancel, or terminate the Activity: + +```ruby +handle.result # block until the activity completes; returns the result +handle.describe # fetch metadata (status, timestamps, attempt, last failure, etc.) +handle.cancel # request cancellation +handle.terminate # force-close the activity +``` + +## Wait for the result of a Standalone Activity {/* #get-activity-result */} + +Under the hood, calling `client.execute_activity` is the same as calling `client.start_activity` to +durably enqueue the Standalone Activity, and then calling `handle.result` to block until the +Activity completes and return the result: + +```ruby +result = handle.result +``` + +Or use the Temporal CLI to wait for a result by Activity ID: + +```bash +temporal activity result --activity-id standalone-activity-id +``` + +## List Standalone Activities {/* #list-activities */} + +Use [`Temporalio::Client#list_activities`](https://github.com/temporalio/sdk-ruby) to list +Standalone Activity Executions that match a [List Filter](/list-filter) query. The result is an +`Enumerator` of `ActivityExecution` values that fetches pages from the server on demand as the +enumerator is consumed. + +These APIs return only Standalone Activity Executions. Activities running inside Workflows are not +included. + +[list_activities.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/list_activities.rb) + +```ruby +client.list_activities("TaskQueue = 'standalone-activity-sample'").each do |execution| + puts "#{execution.activity_id} #{execution.activity_type} #{execution.status}" +end +``` + +Run it: + +```bash +bundle exec ruby standalone_activity/list_activities.rb +``` + +Or use the Temporal CLI: + +```bash +temporal activity list +``` + +The query parameter accepts the same [List Filter](/list-filter) syntax used for [Workflow +Visibility](/visibility). For example, `ActivityType = 'ComposeGreeting' AND Status = 'Running'`. + +## Count Standalone Activities {/* #count-activities */} + +Use [`Temporalio::Client#count_activities`](https://github.com/temporalio/sdk-ruby) to count +Standalone Activity Executions that match a [List Filter](/list-filter) query. This returns the +total count of executions (running, completed, failed, etc.) — not the number of queued tasks. It +works the same way as counting Workflow Executions. + +[count_activities.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/count_activities.rb) + +```ruby +result = client.count_activities("TaskQueue = 'standalone-activity-sample'") +puts "Total: #{result.count}" +result.groups.each do |group| + puts " #{group.group_values.join(',')} => #{group.count}" +end +``` + +Run it: + +```bash +bundle exec ruby standalone_activity/count_activities.rb +``` + +Or use the Temporal CLI: + +```bash +temporal activity count +``` + +## Run Standalone Activities with Temporal Cloud {/* #run-standalone-activities-temporal-cloud */} + +The code samples on this page use `Temporalio::EnvConfig::ClientConfig.load_client_connect_options`, +so the same code works against Temporal Cloud — just configure the connection via environment +variables or a TOML profile. No code changes are needed. + +For a step-by-step guide on connecting to Temporal Cloud, including Namespace creation, certificate +generation, and authentication setup in the Cloud UI, see +[Connect to Temporal Cloud](/develop/ruby/client/temporal-client#connect-to-temporal-cloud). + +### Connect with mTLS + +Set these environment variables with values from your Temporal Cloud Namespace settings: + +``` +export TEMPORAL_ADDRESS=..tmprl.cloud:7233 +export TEMPORAL_NAMESPACE=. +export TEMPORAL_TLS_CLIENT_CERT_PATH='path/to/your/client.pem' +export TEMPORAL_TLS_CLIENT_KEY_PATH='path/to/your/client.key' +``` + +### Connect with an API key + +Set these environment variables with values from your Temporal Cloud API key settings: + +``` +export TEMPORAL_ADDRESS=..api.temporal.io:7233 +export TEMPORAL_NAMESPACE=. +export TEMPORAL_API_KEY= +``` + +Then run the Worker and starter code as shown in the earlier sections. diff --git a/docs/develop/ruby/index.mdx b/docs/develop/ruby/index.mdx index f00001226d..ee1e6cc7eb 100644 --- a/docs/develop/ruby/index.mdx +++ b/docs/develop/ruby/index.mdx @@ -53,6 +53,7 @@ From there, you can dive deeper into any of the Temporal primitives to start bui - [Activity basics](/develop/ruby/activities/basics) - [Activity execution](/develop/ruby/activities/execution) +- [Standalone Activities](/develop/ruby/activities/standalone-activities) - [Timeouts](/develop/ruby/activities/timeouts) - [Asynchronous Activity completion](/develop/ruby/activities/asynchronous-activity) - [Dynamic Activity](/develop/ruby/activities/dynamic-activity) diff --git a/docs/encyclopedia/activities/standalone-activity.mdx b/docs/encyclopedia/activities/standalone-activity.mdx index c866ab0707..dcfffb721b 100644 --- a/docs/encyclopedia/activities/standalone-activity.mdx +++ b/docs/encyclopedia/activities/standalone-activity.mdx @@ -64,6 +64,7 @@ Pick your SDK and follow the quickstart: - [Python SDK - Standalone Activities quickstart and code sample](/develop/python/activities/standalone-activities) - [.NET SDK - Standalone Activities quickstart and code sample](/develop/dotnet/activities/standalone-activities) - [Java SDK - Standalone Activities quickstart and code sample](/develop/java/activities/standalone-activities) +- [Ruby SDK - Standalone Activities quickstart and code sample](/develop/ruby/activities/standalone-activities) - [TypeScript SDK - Standalone Activities quickstart and code sample](/develop/typescript/activities/standalone-activities) ::: diff --git a/sidebars.js b/sidebars.js index 79d3fbd669..c5598504e3 100644 --- a/sidebars.js +++ b/sidebars.js @@ -924,6 +924,7 @@ module.exports = { items: [ 'develop/ruby/activities/basics', 'develop/ruby/activities/execution', + 'develop/ruby/activities/standalone-activities', 'develop/ruby/activities/timeouts', 'develop/ruby/activities/asynchronous-activity', 'develop/ruby/activities/dynamic-activity', From 242f362b215b805c3b125767b50722222407c151 Mon Sep 17 00:00:00 2001 From: Greg Travis Date: Fri, 5 Jun 2026 14:35:05 -0400 Subject: [PATCH 2/3] Fix code links --- .../ruby/activities/standalone-activities.mdx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/docs/develop/ruby/activities/standalone-activities.mdx b/docs/develop/ruby/activities/standalone-activities.mdx index 8dc155b5cc..195b9e0f62 100644 --- a/docs/develop/ruby/activities/standalone-activities.mdx +++ b/docs/develop/ruby/activities/standalone-activities.mdx @@ -28,7 +28,7 @@ Temporal Ruby SDK support for [Standalone Activities](/standalone-activity) is a Standalone Activities are Activities that run independently, without being orchestrated by a Workflow. Instead of starting an Activity from within a Workflow Definition, you start a Standalone -Activity directly from a [`Temporalio::Client`](https://github.com/temporalio/sdk-ruby). +Activity directly from a [`Temporalio::Client`](https://ruby.temporal.io/Temporalio/Client.html). The way you write the Activity and register it with a Worker is identical to [Workflow Activities](/develop/ruby/activities/basics). The only difference is that you execute a Standalone @@ -93,7 +93,7 @@ It uses an in-memory database, so do not use it for real use cases. :::info Temporal Cloud All code samples on this page use -[`Temporalio::EnvConfig::ClientConfig.load_client_connect_options`](https://github.com/temporalio/sdk-ruby) +[`Temporalio::EnvConfig::ClientConfig.load_client_connect_options`](https://ruby.temporal.io/Temporalio/EnvConfig/ClientConfig.html#load_client_connect_options-class_method) to configure the Temporal Client connection. It responds to [environment variables](/references/client-environment-configuration) and [TOML configuration files](/references/client-environment-configuration), so the same code works against a local dev @@ -130,7 +130,7 @@ standalone_activity/ ## Define your Activity {/* #define-activity */} -An Activity in the Temporal Ruby SDK is a subclass of `Temporalio::Activity::Definition` that +An Activity in the Temporal Ruby SDK is a subclass of [`Temporalio::Activity::Definition`](https://ruby.temporal.io/Temporalio/Activity/Definition.html) that implements an `execute` method. The way you define a Standalone Activity is identical to how you define an Activity orchestrated by a Workflow. In fact, the same Activity can be executed both as a Standalone Activity and as a Workflow Activity. @@ -154,7 +154,7 @@ end ## Run a Worker with the Activity registered {/* #run-worker */} Running a Worker for Standalone Activities is the same as running a Worker for Workflow Activities — -you create a `Temporalio::Worker`, register the Activity class, and call `worker.run`. The Worker +you create a [`Temporalio::Worker`](https://ruby.temporal.io/Temporalio/Worker.html), register the Activity class, and call `worker.run`. The Worker doesn't need to know whether the Activity will be invoked from a Workflow or as a Standalone Activity. See [How to run a Worker](/develop/ruby/workers/run-worker-process) for more details on Worker setup and configuration options. @@ -188,7 +188,7 @@ Leave this terminal running — the Worker needs to stay up to process activitie ## Execute a Standalone Activity {/* #execute-activity */} -Use [`Temporalio::Client#execute_activity`](https://github.com/temporalio/sdk-ruby) to execute a +Use [`Temporalio::Client#execute_activity`](https://ruby.temporal.io/Temporalio/Client.html#execute_activity-instance_method) to execute a Standalone Activity and block until it completes. Call this from your application code, not from inside a Workflow Definition. This durably enqueues your Standalone Activity in the Temporal Server, waits for it to be executed on your Worker, and then returns the result. @@ -206,7 +206,7 @@ result = client.execute_activity( puts "Activity result: #{result}" ``` -The first argument is the Activity to run. It can be the `Activity::Definition` subclass, an +The first argument is the Activity to run. It can be the [`Activity::Definition`](https://ruby.temporal.io/Temporalio/Activity/Definition.html) subclass, an instance of one, or a string/symbol name. Positional arguments after it are passed to the Activity's `execute` method. The call requires `id`, `task_queue`, and at least one of `start_to_close_timeout` or `schedule_to_close_timeout`. @@ -238,7 +238,7 @@ temporal activity execute \ Starting a Standalone Activity means sending a request to the Temporal Server to durably enqueue your Activity job, without waiting for it to be executed by your Worker. -Use [`Temporalio::Client#start_activity`](https://github.com/temporalio/sdk-ruby) to start a +Use [`Temporalio::Client#start_activity`](https://ruby.temporal.io/Temporalio/Client.html#start_activity-instance_method) to start a Standalone Activity and get a handle without waiting for the result: [start_activity.rb](https://github.com/temporalio/samples-ruby/blob/main/standalone_activity/start_activity.rb) @@ -278,7 +278,7 @@ temporal activity start \ ## Get a handle to an existing Standalone Activity {/* #get-activity-handle */} -Use `client.activity_handle` to create a handle to a previously started Standalone Activity: +Use [`Temporalio::Client#activity_handle`](https://ruby.temporal.io/Temporalio/Client.html#activity_handle-instance_method) to create an [`ActivityHandle`](https://ruby.temporal.io/Temporalio/Client/ActivityHandle.html) for a previously started Standalone Activity: ```ruby handle = client.activity_handle('standalone-activity-id') @@ -313,9 +313,9 @@ temporal activity result --activity-id standalone-activity-id ## List Standalone Activities {/* #list-activities */} -Use [`Temporalio::Client#list_activities`](https://github.com/temporalio/sdk-ruby) to list +Use [`Temporalio::Client#list_activities`](https://ruby.temporal.io/Temporalio/Client.html#list_activities-instance_method) to list Standalone Activity Executions that match a [List Filter](/list-filter) query. The result is an -`Enumerator` of `ActivityExecution` values that fetches pages from the server on demand as the +`Enumerator` of [`ActivityExecution`](https://ruby.temporal.io/Temporalio/Client/ActivityExecution.html) values that fetches pages from the server on demand as the enumerator is consumed. These APIs return only Standalone Activity Executions. Activities running inside Workflows are not @@ -346,7 +346,7 @@ Visibility](/visibility). For example, `ActivityType = 'ComposeGreeting' AND Sta ## Count Standalone Activities {/* #count-activities */} -Use [`Temporalio::Client#count_activities`](https://github.com/temporalio/sdk-ruby) to count +Use [`Temporalio::Client#count_activities`](https://ruby.temporal.io/Temporalio/Client.html#count_activities-instance_method) to count Standalone Activity Executions that match a [List Filter](/list-filter) query. This returns the total count of executions (running, completed, failed, etc.) — not the number of queued tasks. It works the same way as counting Workflow Executions. @@ -375,7 +375,7 @@ temporal activity count ## Run Standalone Activities with Temporal Cloud {/* #run-standalone-activities-temporal-cloud */} -The code samples on this page use `Temporalio::EnvConfig::ClientConfig.load_client_connect_options`, +The code samples on this page use [`Temporalio::EnvConfig::ClientConfig.load_client_connect_options`](https://ruby.temporal.io/Temporalio/EnvConfig/ClientConfig.html#load_client_connect_options-class_method), so the same code works against Temporal Cloud — just configure the connection via environment variables or a TOML profile. No code changes are needed. From 1afebf03ca0c4a1afea6e25caa0e8695f7eae406 Mon Sep 17 00:00:00 2001 From: Jwahir Sundai Date: Wed, 10 Jun 2026 16:18:50 -0500 Subject: [PATCH 3/3] update link to Temporal CLI install guide fix build error --- docs/develop/ruby/activities/standalone-activities.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/develop/ruby/activities/standalone-activities.mdx b/docs/develop/ruby/activities/standalone-activities.mdx index 195b9e0f62..393bf14115 100644 --- a/docs/develop/ruby/activities/standalone-activities.mdx +++ b/docs/develop/ruby/activities/standalone-activities.mdx @@ -72,7 +72,7 @@ Prerequisites: brew install temporal ``` - Or see the [Temporal CLI install guide](/cli#install) for other platforms. + Or see the [Temporal CLI install guide](/cli/setup-cli) for other platforms. Verify the installation: