Release notes
Hand a step of a workflow to an agent
Highlight
Hand a step of a workflow to an agent. A workflow is good at the decisions you can write down in advance: if the order is over $200, use the white-glove strategy. The ones you can't write down have always gone to a person, read the note the customer left and decide whether this needs a call, look at what the provider has done for the last forty minutes and judge whether the delivery is still recoverable. This week a workflow node can hand that step to one of your custom agents, and the rest of the graph branches on what it reports back.
- The agent arrives knowing the case. It receives the entity the workflow fired on, the trigger's metadata, and the output of every node upstream of it. So the task context you write is about the judgment you want, not about re-explaining the delivery.
- Branch on the finding, not on the fact that it ran. The full written report lands in the node's own variable, and each field of the agent's output format gets a variable of its own, at its own type, so a downstream filter compares a number, tests a boolean, or matches an enum exactly the way it would with any other field.
- What it's allowed to do is settled before it runs. Only report-only agents can be picked, so a node can't quietly take an action on your behalf. An agent node can't sit on a workflow that runs synchronously while an order is being created, because the order would wait on it. And each node carries its own timeout and its own answer for what the workflow does when the agent fails.
- Or run one against the delivery in front of you. The delivery details page has an agent picker. Run works the agent against that delivery and streams it into the panel beside the page; Ask opens a chat session with the delivery already in context, for when you turned up with your own question.
Find it as Run Custom Agent in the workflow editor, or invoke_agent on the API. See Hand a step to an agent.
New & improved
Nash Agent
- Answer an agent's question in your own words. Every closed-choice question on a guided intake card carries a free-text Other row, so a question whose options don't fit no longer leaves dismissing the card as the only way out. An agent can still close a set where the options have to resolve to real records, such as a notification group or a trigger.
- Tools you bring reach the agent as you declared them. A connector built on your own endpoint publishes its real parameter schema instead of the agent inferring the shape from a description: required parameters are enforced, values are coerced to the declared types, and a call that can't be made comes back with the reason. See Connectors.
Orchestration
- An optimization strategy can route around water. A ferry leg costs the solver no more than ordinary driving, so it will send a truck across a sound whenever that's the fastest line, and the result looks feasible while being undeliverable, because sailings are fixed, need booking, and cap height and weight.
avoidFerrieskeeps the solver on the road. Any coastal operation can meet this, not just the one that reported it. - A workflow can turn a condition it detects into durable work on the Execute page: create, update, resolve, assign, or unassign a route flag. Repeat runs land on the same flag rather than stacking duplicates, a flag that comes back reopens and pages the route's assignee the way the first occurrence did, and a flag a dispatcher has already acknowledged is left alone unless you choose otherwise. See Actions.
Platform API
- Look up an order by the reference your own system uses.
GET /v1/orders?referenceId=matches exactly and ignores the default date window, so an order from six months ago is still findable. It returns every match: reference IDs aren't unique in Nash, and collapsing them to one would hide orders. The field is on the list response now too. - A delivery's
statusHistorycarries where each scan happened. Carriers that move a parcel through a scan network report a facility or suburb per scan; that arrives aslocationon the history entry and indelivery.*webhooks, next to the status and its description. It'snullfor point-to-point couriers, which have no scan points. See Where a scan happened. - A quote rejected on package requirements says which requirement. Failed quotes carry an
errorCodeand anerrorDetailsobject naming the requirements the provider wouldn't take. When every eligible provider rejects the package, the delivery carries aquoteFailuresummary and a normalizedfailureCode, and dispatching it returns a422instead of a generic failure. See Order requirements. - Pick-and-pack orders can ask the shopper to call.
contactjoinsrefundandsubstituteas a substitution preference: rather than Nash deciding for the customer when an item isn't on the shelf, the shopper reaches them and agrees a replacement. Support depends on the pick-and-pack provider. See Pick and pack. - The
dispatchedwebhook can be replayed for a route dispatch, not only for delivery-window and optimized-order dispatch. A customer who missed that message can be resent it from the Portal rather than by hand.
Fleet
- Let drivers skip item marking. *(Opt-in.)* For operations where ticking off each item isn't part of the job, the stop sheet hides the package list and shows a read-only item count instead; the driver takes proof of delivery and completes the stop, and Nash resolves the items behind it. A dropoff still can't deliver an item that was never picked up. Turn it on in My Fleet → Features → Delivery & Returns, with a per-driver-group override.
- Route offers reach the routes driver app. Drivers see the same offer card, countdown, and accept / decline / expire behavior the batch app has, so an operation that assigns work by offer can move onto routes.
Portal
- Arabic, and a portal that reads right to left. Arabic joins the portal languages, selectable as your organization's default or as your own display preference, and layout, navigation, controls, charts, and drag-and-drop follow the direction of the language rather than staying pinned left to right.
- Name your own columns. Orders and Routes column labels can be overridden per organization from Portal Customization, so a team dispatching technicians isn't reading "Pickup Location" and "Order Value". The labels you set show to everyone in the organization, in every language.
- Define the custom events your organization uses. *(Opt-in.)* A catalog under Orchestrate holds each event's key and name, and the delivery Add Event dialog offers the active ones while still accepting a free-form event. Keys can be dotted now,
order.ready,store.order.packed, so the catalog can describe the vocabulary your integrations already send. - The Deliveries table shows package weight beneath value and item count, and in the package tooltip.
- The Orders table gains a Dropoff Zip column you can sort on, for operations that group a day's work by postal code.
- A refund larger than the original order value is flagged where it's decided and in refund history. The warning doesn't block the refund; the insurance cap still does its own job.
Integrations
- A Grubhub contract can carry the sub-brand name Nash sends, instead of it being derived from the seller ID on each order.
Fixes
Platform API
- A request comfortably inside your rate limit is no longer rejected as though it were over it. Counting requests is now a single atomic operation, so a counter that expired mid-count can't be left in a state that turns away the next caller.
- Notifications that depend on a zone geofence are evaluated without backing up everything queued behind them, so alerts land when they're supposed to.
Fleet
- Item actions on the same route are applied one at a time, so two updates that arrive together can't overwrite each other's item states.
- An item action that fails on several items reports every failure, not only the first one.
- A failed stop gives the reason its own status carries, rather than always reporting the stop as unattempted.
- Proof-of-delivery photo checks read unpackaged store goods as delivered items, and treat a house number or a courier in frame as supporting evidence rather than a requirement. A photo that plainly shows the delivery on a doorstep passes instead of being flagged.
Integrations
- Shopify pickup orders carry the tags you configured, the same as the rest of your orders.
Nash Agent
- An artifact Slack refuses is reported instead of vanishing, and a file an agent uploads to Slack from outside a chat session arrives.
- A run notification's body is cut on a markdown boundary, so a truncated message doesn't end mid-formatting.
- A provider failure is recorded as a failed run and retried, rather than recorded as a run that succeeded and returned nothing.
- A chat turn survives a worker being recycled instead of being killed mid-answer.
- A watch tick is never scheduled in the past, and a tick that fails is retried and reported.
- In Slack, the right task chip resolves when an agent makes several tool calls at once, and a run's message links back to its session.
Portal
- The Execute route panel keeps the data it did receive when part of a response fails, instead of showing a skeleton that never resolves.
- The delivery map draws the
dropoff_completemarker. - Tracking customization saves instead of silently refusing when an earlier preference is stale.
- On the tracking map, the store pin stays visible behind other markers, past ETAs stop being shown as if they were still ahead, and the map stops polling while it's in a background tab.
- An agent session opened from a link after it ended shows its transcript and its files rather than an empty page.
- Switching organizations queries the region that organization actually lives in.