Return

Overview

The Return expression signals the end of a compound action's execution, streaming mapped data back to the chat for user-layer runs. In system-layer runs, it will stop quietly, and any returned data is sent to the caller. The expression also works as an early-return expression, you can place it at the end of the flow or in a Switch case to simplify logic.

Unlike an error-based exit (handled by a raise expression), the return expression exits gracefully, providing a way to output data in a structured format using the output_mapper, which follows the Moveworks Data Mapping Syntax.

Different behaviors based on content

ContextWhat HappensBest For
User-LayerReturns data and the assistant provides it to the userDeliver results to users
System-LayerReturns data and it is provided toBackend orchestration
❗️

Keep these in mind

  • Be mindful of our token limits.
  • Return statements have some reserved keywords for Citations (results & result). Please do not use the keyword "result" unless you plan to include an "id" and "friendly_id" (optional) which will create a citation.

Low-Code Editor

Add the Return step and map the data to be returned.

  1. Map the Data: Build the output mapper with keys and DSL, pull from the data bank and transform on the fly.
  1. Leave Early: Stop execution early when condition is triggered in switch cases

Syntax Reference

Schema

return:
  output_mapper:  # Optional dict for structured chat output (user context only)
    key1: DSL_MAPPED_VALUE  # e.g., "summary: data.results | $JOIN(', ')"
    key2: DSL_MAPPED_VALUE  # Supports transforms like MAP(), $TITLECASE()
    # Reserved: Avoid "result" unless for citations (needs "id"/"friendly_id")

Fields

FieldTypeMandatoryDescription
output_mapperdictNoTransforms and maps data bank variables

Practical Examples

Example 1: Basic Action Handoff

Return the aggregated result of two actions

Compound action

steps: 
  - action:
      action_name: fetch_data_one
      output_key: action_output_one  # e.g., { "status": "success", "data": { ... } }
  - action:
      action_name: fetch_data_two
      output_key: action_output_two  # e.g., { "priority": "2" }
  - return:
      output_mapper:
        output_one: data.action_output_one
        output_two: data.action_output_two

Result Expectation

{
  "output_one": {
    "status": "success",
    "data": {
      "value": 42,
      "description": "The answer to life, the universe, and everything."
    }
  },
  "output_two": {
    "priority": "2"
  }
}

Example 2: Filtered User List

Transform a list of users

Compound action

steps: 
  - action:
      action_name: fetch_users
      output_key: users_output
  - return:
      output_mapper:
        user_list: 
          MAP():
            items: data.users_output
            converter:
              id: item.id
              display_name: item.name.$TITLECASE()

Data bank

{
  "data": {
    "users_output": [
      { "id": "user1", "name": "alice", "age": 30 },
      { "id": "user2", "name": "bob", "age": 25 },
      { "id": "user3", "name": "charlie", "age": 35 }
    ]
  }
}

Result Expectation

{
  "user_list": [
    {
      "id": 1,
      "display_name": "Alice"
    },
    {
      "id": 2,
      "display_name": "Bob"
    },
    {
      "id": 3,
      "display_name": "Charlie"
    }
  ]
}

Example 3: Early return in Switch

Skip approval process if user is admin

steps: 
  - switch:
      cases:
        - condition: meta_info.user.role == "admin"
          steps:
            - action:
                action_name: grant_access_to_grafana
                output_key: admin_grafana_access_output
            - return: # Early exit here
                output_mapper: {}
      default:
        - steps:
            - action:
                output_key: create_generic_approval_request_result
                action_name: mw.create_generic_approval_request
                input_args:
                  approval_key: '"MANAGER"'
                  approval_details: '"Need access to Grafana"'
                  users_requested_for: meta_info.user
  - action:
      action_name: do_another_action
      output_key: another_action_output
  - action:
      action_name: do_another_action_two
      output_key: another_action_output_two