
How Actions relate to the Rulebook
The Rulebook is the brain; Actions are the hands. When the Rulebook walks its tree and reaches a Tool node, it invokes the Action that node points to: The Action owns only the middle: take typed inputs, call your APIs, return typed outputs. Intent matching, input extraction, branching, and the final reply are all the Rulebook’s job. This separation is why an Action’s description doesn’t affect whether it fires, routing is encoded in the tree’s structure, not in the Action.Actions vs Attributes
Both are built on the same Data Steps engine, but they trigger differently:Anatomy of an action
The detail view has two tabs: Setup and Data Steps.Setup tab
Two sections, named exactly as the UI labels them:- Required information for this action to run, the input fields. Each field has a name, a type (
string/number/boolean), and arequiredflag. These define the contract the Rulebook must satisfy before invoking the Tool node, typically by placing a Read node upstream (LLM extraction) or referencing context already on the conversation (such as an Attribute). - Data returned after this action runs, the output fields, each with a name and type. These flow back into the tree for downstream Check nodes to branch on, Reply nodes to interpolate, and other Tool nodes to consume as input.

Data Steps tab
The chain of HTTP requests that takes the inputs, calls your APIs, and produces the outputs, the same engine as Attributes’ Data Collection Steps.Field → Gets value from: Step → response field).

Creating an action
Open the Actions page and click New Action
Fill in the basics
- Name (required): an imperative phrase, Skip Smart Save, Cancel Plastic Card, Reorder Physical Card.
- Description: a human-readable summary for teammates browsing the list. It does not trigger the action; routing lives in the Rulebook.

Define the inputs (Setup tab)
required when the action cannot proceed without it. Once the Rulebook routes a conversation here, the LLM extracts these from context (or asks the customer for any required field it can’t find).Define the outputs (Setup tab)
success boolean and a message string.Wire up the Data Steps (Data Steps tab)
$ picker to interpolate input fields into URLs, headers, or bodies. Then, in Connect values to the fields that will be returned, map each output field to a step’s response value.Test before saving
Save, then wire it into the Rulebook
A worked example: cancel subscription
A canonical action. The customer says “I want to cancel my plan”, a Rulebook rule matches the cancellation intent and invokes this action, the action calls your billing API, and a Reply node confirms.Create the action
Define the inputs
Define the outputs
Add the Data Step
POST. URL: the cancellation endpoint on your billing API, with the customerId input interpolated into the path via the $ picker. Headers: an Authorization header carrying your billing token. Body: a JSON object containing reason, interpolated from the input.Save From Response: map the billing API’s response fields to your output names, for example, the billing system’s confirmation_id saves as confirmationId, its refund.amount saves as refundAmount, and its effective_at saves as effectiveDate.Connect values to the returned fields
confirmationId ← Cancel via Billing API → confirmationId, and likewise for refundAmount and effectiveDate.Test, save, and wire into the Rulebook
customerId from your dev environment and confirm the response shape matches your declared outputs. Save, then add a Tool node referencing Cancel Subscription under the rule that matches the cancellation intent.reason = "the product isn't working for us"; a Check node confirms the customer is identified (customerId non-null in context); a Tool node invokes Cancel Subscription; the confirmationId / refundAmount / effectiveDate outputs flow back; a Reply node composes the confirmation. The Action owns only the API call and the typed result, everything else is the Rulebook.
Chaining actions
A single Tool node rarely covers an end-to-end workflow. The common pattern is to chain Tool nodes inside a Sequence, each Tool’s output feeding the next Tool’s input. For example, a refund flow might run:- Lookup Order, input
orderId; outputcustomerId,totalAmount,isRefundable. - Verify Eligibility, input
customerId,totalAmount(from step 1); outputeligible,policyReason. - Submit Refund, input
customerId,amount(=totalAmountfrom step 1); outputrefundId,eta.
eligible == false and route to a Reply node that explains the denial. Because upstream outputs become downstream inputs, define each action’s input/output fields precisely, otherwise downstream nodes can’t see fields they expected, or pass values that don’t match the next Tool’s required types.
Which agents can run an action
Actions live at the workspace level. Unlike Attributes, there is no per-agent attachment, you don’t toggle which agents an action belongs to. An action becomes effective for an agent entirely through the Rulebook. A rule has agent assignments; if a rule is assigned to an agent and its tree contains a Tool node referencing the action, that agent can trigger it. The same action wired into multiple rules is reachable from every agent those rules are assigned to. So when a new action isn’t getting called, the question is “is there a published rule, assigned to the responding agent, with a Tool node pointing at this action?”, not “is this action attached to this agent?”Why an action isn’t being called
No published rule references this action
No published rule references this action
The rule isn't assigned to the responding agent
The rule isn't assigned to the responding agent
The Rulebook branch above the Tool node doesn't match
The Rulebook branch above the Tool node doesn't match
A required input field isn't being supplied
A required input field isn't being supplied
A Data Step is failing
A Data Step is failing
The outputs don't match what your API returns
The outputs don't match what your API returns

