For AI agents: a documentation index is available at the root level at /llms.txt and /llms-full.txt. Append /llms.txt to any URL for a page-level index, or .md for the markdown version of any page.
Logo
DeveloperAcademyCommunityStatus
ReferenceGuides
ReferenceGuides
  • Agent Studio
    • Overview
    • Quickstart Guides
    • Core Concepts
    • Conversation Process
    • Actions
      • LLM Actions
      • Built-in Actions
      • HTTP Actions
      • Script Actions
      • Compound Actions
        • Action
        • Switch
        • For Loop
        • Parallel
        • Return
        • Try Catch and Raise Error
        • Notify
        • Input Arguments
        • Progress Updates
        • Compound Action Patterns
        • Compound Action Data Bank
        • Compound Action Examples
        • Troubleshooting Compound Actions
    • Connectors
    • System Triggers
    • Agent Architect
    • Cookbooks
    • Development and Testing
    • AI Agent Marketplace
    • Developer Tools
  • Agentic AI
    • LLM Fundamentals
    • The Agentic Reasoning Engine
    • Memory Constructs
    • Conversational Context
    • Guardrails
    • Grounding and Hallucinations
    • Continuous Learning
    • LLMs & SLMs
    • Steerability Tools
    • Multilingual Support
  • Core Platform
    • User Identity
    • Moveworks Agent (On-Prem)
    • Approvals Engine
    • Entity Catalog
    • Moveworks Data Objects
    • Security Information and Event Management (SIEM) Logs Overview
DeveloperAcademyCommunityStatus
On this page
  • Overview
  • Different behaviors based on content
  • Low-Code Editor
  • Syntax Reference
  • Schema
  • Fields
  • Practical Examples
  • Example 1: Basic Action Handoff
  • Compound action
  • Result Expectation
  • Example 2: Filtered User List
  • Compound action
  • Data bank
  • Result Expectation
  • Example 3: Early return in Switch
Agent StudioActionsCompound Actions

Return

||View as Markdown|
Was this page helpful?
Edit this page
Previous

Try Catch and Raise Error

Learn how to use Try Catch and Raise Error expressions for graceful error handling in Moveworks compound actions. Handle API failures and create custom error responses.
Next
Built with

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

1return:
2 output_mapper: # Optional dict for structured chat output (user context only)
3 key1: DSL_MAPPED_VALUE # e.g., "summary: data.results | $JOIN(', ')"
4 key2: DSL_MAPPED_VALUE # Supports transforms like MAP(), $TITLECASE()
5 # 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

1steps:
2 - action:
3 action_name: fetch_data_one
4 output_key: action_output_one # e.g., { "status": "success", "data": { ... } }
5 - action:
6 action_name: fetch_data_two
7 output_key: action_output_two # e.g., { "priority": "2" }
8 - return:
9 output_mapper:
10 output_one: data.action_output_one
11 output_two: data.action_output_two

Result Expectation

1{
2 "output_one": {
3 "status": "success",
4 "data": {
5 "value": 42,
6 "description": "The answer to life, the universe, and everything."
7 }
8 },
9 "output_two": {
10 "priority": "2"
11 }
12}

Example 2: Filtered User List

Transform a list of users

Compound action

1steps:
2 - action:
3 action_name: fetch_users
4 output_key: users_output
5 - return:
6 output_mapper:
7 user_list:
8 MAP():
9 items: data.users_output
10 converter:
11 id: item.id
12 display_name: item.name.$TITLECASE()

Data bank

1{
2 "data": {
3 "users_output": [
4 { "id": "user1", "name": "alice", "age": 30 },
5 { "id": "user2", "name": "bob", "age": 25 },
6 { "id": "user3", "name": "charlie", "age": 35 }
7 ]
8 }
9}

Result Expectation

1{
2 "user_list": [
3 {
4 "id": 1,
5 "display_name": "Alice"
6 },
7 {
8 "id": 2,
9 "display_name": "Bob"
10 },
11 {
12 "id": 3,
13 "display_name": "Charlie"
14 }
15 ]
16}

Example 3: Early return in Switch

Skip approval process if user is admin

1steps:
2 - switch:
3 cases:
4 - condition: meta_info.user.role == "admin"
5 steps:
6 - action:
7 action_name: grant_access_to_grafana
8 output_key: admin_grafana_access_output
9 - return: # Early exit here
10 output_mapper: {}
11 default:
12 - steps:
13 - action:
14 output_key: create_generic_approval_request_result
15 action_name: mw.create_generic_approval_request
16 input_args:
17 approval_key: '"MANAGER"'
18 approval_details: '"Need access to Grafana"'
19 users_requested_for: meta_info.user
20 - action:
21 action_name: do_another_action
22 output_key: another_action_output
23 - action:
24 action_name: do_another_action_two
25 output_key: another_action_output_two