Skip to main content
Every conversation in Reliant is organized into threads. Threads matter most when working with sub-agents and complex workflows.

What is a Thread?

A thread is a sequence of messages—user inputs, AI responses, and tool results. When you start a chat, Reliant creates a root thread for your conversation. When workflows spawn sub-agents or run child workflows, each can get its own thread. This keeps conversations isolated: a research agent’s internal dialogue doesn’t clutter your main conversation.

How Threads Work

Threads are managed automatically by the workflow engine. When a workflow or node executes, it receives a thread from its execution context. Activities like CallLLM and SaveMessage automatically use this thread—you don’t need to pass thread IDs explicitly. Thread behavior is controlled at the workflow and node level using ThreadConfig. This determines whether a child workflow shares its parent’s thread, gets a fresh thread, or forks from the parent’s conversation history.

Thread Modes

Configure thread behavior on workflow or loop nodes using the thread field: inherit (default): Use the parent’s thread. Messages appear in the same conversation. This is how most single-agent interactions work.
new: Create a fresh, empty thread. The sub-workflow starts with no conversation history. Useful for spawned agents that should work independently.
fork: Copy the parent’s messages into a new thread. The sub-workflow sees the conversation history but writes to its own thread. Changes don’t affect the parent.

Thread Configuration Options

The full ThreadConfig structure:

Memo Behavior

In loops, memo controls whether the same thread is reused across iterations:

Message Injection

The inject field adds a message to the thread before the child workflow starts. This is how you give instructions to sub-agents:
Inject behavior by mode: In loops, memo controls inject frequency:
  • memo: false (default): Fresh thread each iteration, inject added every iteration
  • memo: true: Thread reused, inject added on first iteration only

Accessing Thread Data in CEL

The thread.* namespace provides access to the current thread:

Viewing Thread History

The chat interface shows messages from all threads by default, displayed together in chronological order. Sub-agent threads are visually distinguished with an indented left border and a label indicating which thread they belong to (e.g., “Spawn Tool from Main”). Thread filtering tabs allow you to focus on specific agent conversations Thread filtering: At the top of the chat, you’ll see thread tabs showing message counts:
  • All — Messages from all threads combined
  • Main — Only the main conversation thread
  • [Sub-agent name] — Only that sub-agent’s thread
Click any tab to filter the view. Useful when you want to focus on a specific sub-agent’s work or see just the main conversation.

Node Output Access

Access completed node outputs via nodes.<id>.*. For detailed CEL expression patterns including loop outputs, qualified IDs for nested nodes, and handling skipped nodes, see the CEL Expressions Reference. Quick examples: