You open a HubSpot workflow, you need it to do something the standard actions cannot express, and until recently that meant one of two things: bend the built-in actions into a shape they were never meant to hold, or write a custom code action yourself. As of May 2026 there is a third option. You describe the action in plain language and Breeze writes the code for you.
That changes the question. It used to be "can I build this?" Now it is "should I write this myself, let Breeze draft it, or not reach for code at all?" We build and debug this kind of automation for a living, so here is the honest version: where each option wins, what the generated code gets right, and the parts that still bite you if nobody reads them.
Before you reach for code, it helps to see the whole ladder. There are three places your logic can live, and most of the time the right answer is the first one.
Most workflows should live at level one. Code is for the cases where a branch and a "set property" genuinely cannot get you there. That is true whether you write the code or Breeze does.
This is the part most workflow tutorials skip, and it is the part that decides whether your action works at 9am on a Monday when 400 records enroll at once. A custom code action requires a Data Hub Professional or Enterprise subscription (the hub formerly called Operations Hub). Inside one, here is what you are working with:
20 seconds. Every external API call you make eats into that budget.128 MB.50 properties passed into the action.65,000 characters.process.env.TOKEN in Node, os.getenv() in Python), with a combined limit of 1,000 characters across all of them. Enough for a couple of tokens, not a phone book.@hubspot/api-client and axios in Node, requests in Python. You cannot install anything you like.None of these are dealbreakers. They are guardrails, and they explain most of the "it worked in testing and broke in production" stories. An action that calls three external endpoints in sequence is fine for one record and blows past 20 seconds the moment the API is slow.
The May 2026 update let Breeze Assistant build a complete workflow from a description, and, for Data Hub Professional and Enterprise, generate a custom code action when no standard action fits. You describe the behavior, tell it which properties are inputs and what you expect back, and it writes the action. JavaScript is the default. You review it in the standard code editor before anything saves, and any workflow Breeze creates stays turned off until you manually enable it.
That last detail is the whole safety model. Breeze drafts, you approve. It does not quietly push logic into production.
It is also worth knowing what it will not touch. Breeze Assistant cannot set your enrollment triggers, add a delay-until-an-event, insert a format-data step, or build AND/OR branch logic for you. So it is a fast way to get one action written, not a way to have the whole automation designed for you. You still own the shape of the workflow.
Say you want to score a deal when it enrolls. You describe it to Breeze, and it produces something close to this:
const hubspot = require('@hubspot/api-client');
exports.main = async (event, callback) => {
const amount = parseFloat(event.inputFields['amount']) || 0;
const stage = event.inputFields['dealstage'] || '';
const source = event.inputFields['deal_source'] || '';
let score = 0;
if (amount > 50000) score += 40;
else if (amount > 10000) score += 20;
if (source === 'referral') score += 30;
if (stage === 'qualifiedtobuy') score += 15;
callback({
outputFields: {
deal_score: score,
priority: score >= 60 ? 'high' : 'normal'
}
});
};
That is genuinely useful, and it is correct. But notice what you have to check before you trust it:
parseFloat(undefined) returns NaN, which is why the || 0 matters. Generated code usually handles this. Verify that it did, because a single NaN silently poisons every branch downstream.50000 and referral. Those are business rules, not code details. Only you know if they are right.This is the same lesson as our take on using AI to write code without shipping something generic: the model gets you to a working first draft fast, and the value you add is reading it.
undefined, your math becomes NaN, and nothing errors. It just routes wrong. Guard every input.Breeze writing workflow code is a real shortcut, not a replacement for judgement. It collapses the "how do I write this" step and leaves the two steps that actually matter: deciding whether code belongs here at all, and reading what runs before it touches a live record. Treat the generated action the way you would treat a pull request from a fast junior developer. Quick, capable, and worth reviewing every time.
If your portal has a drawer full of workflows nobody remembers writing, half of them firing on records they should not, that is exactly the kind of thing we untangle. Take a look at how we work at Studio Nope, or read our quick checks that tell you if a HubSpot portal is in trouble.