Human-in-the-Loop Automation with n8n — Liam McGarrigle

Channel: aiDotEngineer

Published at: 2026-05-02

YouTube video id: tDArkCqjA-c

Source: https://www.youtube.com/watch?v=tDArkCqjA-c

How's everybody doing?
>> Good.
>> Is this everyone's first workshop of the
day? You guys did one before?
>> You guys have been busier than me. All
right, great. Well, I'm Liam. I'm a uh
developer advocate at NAN, which means I
get to fly around the world and do
really cool stuff like this and speak in
to people what probably way smarter than
I am uh about some some really cool
stuff.
Today we have a pretty short workshop.
Uh is this is this everyone's first time
with NAD? Has everyone used NAN before?
Raise it. Everyone has used it before.
>> Haven't used it. Okay. of those people
who used it like entry level power users
like what what would you guys say in
terms of
>> always a beginner
always be
>> okay well we'll be starting from the
basics here essentially we're going to
build as if it was your first workflow
we're going to start from there
agent and then we're going to add some
human in the loop to it and you'll be
set up to take that and expand it to do
much more for you'll essentially be
making a really simple
Google uh Gmail and calendar management
agent that can go and and manage your
schedule for you.
Um and out of the room here because I'm
not sure what to expect with this
conference.
Is there like uh what's everyone's like
technical level just from like a really
high you can code down here? You don't
know how to code like JavaScript
experience from this room?
>> Yes. No. Maybe. Yes.
>> Okay.
>> JavaScript.
>> Well, one of the great things about NADN
is you don't need to know how to code
for it. It's a visual tool, but you can
break out into code wherever you need
it. even directly in each field you can
write one JavaScript method you can
write like two uppercase and it just
works right so like you don't even need
to do a whole code node or open a
separate file you can do everything
visual and if you need a little bit of
extra power right there you just do it
right in code
so right now I'm sure we all can see the
landscape since you're here you can go
anywhere and build an agent it's so easy
to build agents right
One of the problems we're seeing and
where the winners are going to lie is
seeing what your agent can do, knowing
what it's doing, seeing what went wrong
and being able to tweak it and fix it. I
think that's really where we stand out
and it's kind of where we started off at
which gives us a really strong starting
point here as being the agent builder
and orchestrator that you can see and
control what's happening. And I promise
I hate slides. I removed almost all of
them from the slide template. These are
the only ones we have pretty much. So if
anyone can go to this this link on your
computer if you fall behind or if you
want to do it again or for the people on
video this is a notion page that has the
entire workshop and it actually goes and
gives you homework after. So if you want
to continue there's prompts there of how
to continue your agent afterwards to
keep it moving because we only have an
hour here which isn't a ton of time.
All right. And uh
is anyone still waiting on this link
here?
Okay. I can always come right back to
this
if we need it.
And in there you'll have this page.
And you guys have a little bit of work
to do starting off so that you can
actually use NAD.
So you can go in to this link right
here, register for an NAD cloud account.
You'll automatically get a 14-day free
trial there. That's enough for now. You
don't have to upgrade now. But then make
sure you go and do this, you know, today
or tomorrow because I'll remove these
codes after. I uh I I got you guys a
year of
Cloud Pro, which is $600 value. Uh which
we don't do very often. I uh I like to
be generous. So you guys can go in and
use that. You get it a year for free.
So I'll just give you guys a minute. If
you already have your own NAD um
instance, like if you use it already, if
you use self-hosted and like you have
credentials set up and everything,
that's great. Just make sure you're on
214.2
latest stable version. If you have your
own cloud version, make sure you're
upgraded to that. If you have like a new
self-hosted thing and you haven't used
it much, just know if you run into
issues related to your configuration,
I unfortunately can't really help you uh
in this session. It's a little out of
scope. We have to make sure we keep
moving fast. So, I'll just give everyone
a few minutes to get this set up. I know
there's a questionnaire and it takes a
minute to load.
And the people here who use NAN, do you
use it at work? Just personally, for
fun?
>> Both. Is that usually the consensus? Are
you guys the ones who are bringing it to
your job at work?
>> Yeah, that's great.
for example,
>> for example,
>> that's great. That's great. If you guys
need help using it at work, need help
convincing your bosses, we got two guys
over here who uh that's what they
specialize in. So you can find them
asking me the nerdy questions. You can
ask them uh uh you know the boring
questions.
>> Oh, for sure. So uh another thing I want
to make sure we're not really leaving
anybody behind. Down here there is um
there's a screenshot of kind of what it
looks like we're going to be building.
And then right here is the workflow JSON
that you can just press this button
right here to copy. And the great thing,
one of the many great things about NADN
is you can just copy and paste stuff
into it. So you can copy this, paste it
right into your canvas and you'll have
the completed thing. Try to follow
along, but uh you can go back and look
at this, compare, see what I did. I'm
sure I built it better here than I will
live in front of you. Uh, and if you
have a question, whether it's like even
if it's not really directly related,
raise your hand or shout it out and I'll
stop. I really want to focus this
session on getting the foundations
right, making sure everybody is good to
move on and, you know,
expand this yourself afterwards.
How's progress on on setting this up?
Are we getting closer for uh Can I get a
show of hands of who still isn't set up
in NAM? Everybody is. my local for
example 260
>> it you should you should be okay I just
uh there's been times where people are
like 60 versions behind in a workshop
but if you're self-hosted you probably
don't need the
>> work
oh yeah that that's fine I'm just going
to give a quick uh intro to naden as
well so
Uh this is the demo one.
So for those very new to naden
um is this is this very hard to see for
everybody? I can
it will make me very sad but I can turn
on light mode.
>> Gross.
Okay,
sorry to the people watching on YouTube.
I know you're like h at least that's how
I always feel. But so this is Naden.
This is the interface. If you're on
self-hosted, you don't have these
projects over here. You just have your
personal space, which is which is fine.
On cloud and enterprise and all those,
you get these specific projects. Really
nice thing about that is you can have
all your credentials separate. So if you
have one project where you're doing one
thing, another project where you're
doing a completely different thing, you
don't use different um credentials by
accident and you can share in different
people between the different projects,
you know, to have good access control.
We can make a workflow here and we'll
build this manually.
NAD started in 2019 before chatgvt came
out back when AI was much more boring
than it is today. And back then it was
just like an integration workflow
integration tool. So it's just a low
code way to say if this then do that
then do something else.
So you can for instance have a form uh
there there's these triggers right so
I'm jumping ahead. Everything starts
with a trigger. So it can be when a form
is submitted which we can say uh lead
and then that will be name and then the
native NAN form will come up here and
say my name is Liam
right so that's a trigger there's also
stuff like schedule and hundreds and
hundreds of others there's web hook and
uh API calls and everything like that so
you have a trigger and then there's
actions things that happen in other apps
like Google create a contact,
send an email,
um, and like Salesforce if you want to
create a contact just gluing stuff
together. And one of the really powerful
things is the control flow, right? So if
this then do that you can have different
conditions. If you if this is a personal
contact, Google contacts, business
contact, go right into Salesforce. And
this right here is
what me and many, many others fell in
love with before chat tpt was ever
released, before AI agent meant
anything. This was a platform that
people love to use to build things and
to build full integrated systems. And
you can do much more than you'd expect
with this. Anyone who is a developer or
anything, you would know this is pretty
much just an abstracted version of
putting together API calls. You're just
hooking stuff up, running logic with it.
Of course, now we do uh it a little bit
differently.
Uh and now we can start to follow along
if you weren't already. This we're going
to build our workflow. Now, we pretty
much want to chat with everything. It's
not really when this happens around a
schedule or whatever. Our primary
interface a lot is a chat or at least to
get it to an AI somehow. So in a new
workflow we're going to open a put in a
chat trigger
and with naden you can integrate to many
different things like for instance you
can add
a slack trigger.
So, uh, Slack and then in the trigger,
like on, uh, message received, on
message posted to channel, you can have
it start that way.
At the end of that notion document,
that's your homework to go in and
connect it to your own messaging system.
But for right now, we're going to use
the built-in chat just because it's easy
and already built in.
When you add chat to your canvas, you
get this box down here. We can type a
message. This is great for debugging and
just testing while you're making it
because it just starts it right there.
You can even just start a workflow
without any AI in there. What we'll also
do, if you click in the trigger, there's
this check box that says make available
in chatub.
This is relatively new and as long as
the workflow is published.
When we have that,
there's this little chat icon right here
in the sidebar.
If we click this and go to the tab,
we actually have a whole chat interface
right inside of NAD. So, you don't have
to connect it to an external tool if you
don't want to. It's just easier to kind
of use it right in here. I think that's
this one right here. So, this is that
chat chat trigger we put in there. So,
if we say in here, hello from AI
engineer
and send that, it's not hooked up to
anything. But if we come back to this
workflow
and go to the executions tab,
this right here is that message. Let me
pull this over so you can see it or I
can just click in. Hello from AI
engineer. So you can just use it right
inside of here. So that's what we'll be
setting up today in this session where
you can chat with your agent here. In
the future after the session you can set
it up with your own chat tool.
And of course we need to get AI hooked
up to this, right? So you can click the
little plus here. You can press N on
your keyboard. or this up here. And
we'll just search AI agent.
And the AI agent node is a special kind
of node. You can see it looks much
different where it has these little legs
coming off the bottom instead of on the
side.
So the AI agent is wants three things by
default essentially and only one of them
is required. We need a chat model. This
is the large language model. Another
really big benefit of NADN is you can
connect
any that you want. If it's not on this
list, you can actually do uh pick the
open AI model one and change the base
URL to another provider and that will
usually work. If you use a proxy or
something like that for a big
enterprise, that's how you do it. I'm
going to use open router
which has a really big benefit of from
that service. You can pick any model you
want. You can use chat GPT 5.3 or
claopus 4.6 or whatever you want. And
even bigger bonus,
I gave you a key for it. I will remove
this after today, but if you copy this
key,
brighten notion that you should have
open.
You can click setup credential right
here on the open router account and just
paste it in and that should work.
Now, with that in there, it should load
these. I'm going to use Sonnet 4.6. You
can use whatever you want. Use something
smart so it knows to use your tools.
And then you connect that into there.
Just keep in mind any large language
model node you use, you have to use the
token for that specific
um provider. So you can't use that open
router token inside of something other
than open router for instance.
All right,
any questions thus far?
We're all good.
Is everybody at this point with this
agent? Okay.
Now, at this point, we can chat with the
agent right here. We can say, "How are
you?" or whatever we want. And we should
get a response back
just like that. But if we say,
"What was my first message?"
You don't have any previous messages.
Does anyone know here know what the
problem is?
>> It has no memory.
Open router is not being nice enough to
store it for us. We have to store it
oursel. So there's this memory tab right
here where there's these uh all these
different options you can use. I just
always use simple memory unless I'm
doing something super fancy. Even though
it says for beginners, no shame. It just
makes it easy. Works right away. Did I
see a hand on the back?
>> No.
>> Yep. What's up?
>> What are the
difference
periods or different types of memory you
would use and for what type of
applications?
>> For sure. So the question was what are
the different types of memories and what
are the different applications?
So simple memory we store it in naden
ourself. we handle it all for you. And
inside of here, there's this context
window length,
which means this is five here. So, what
that means is it will only remember five
messages in your context, and it won't
remember anything past there. Um, that
default should probably be a bit higher.
People have longer conversations these
days. You can make that like 50 or
something. Just know you're paying for
all those past tokens. But this is all
abstracted for you. It just works. You
don't have to do anything else.
that works for a pretty much any
application where you're doing a
chatbased system. You would use
something like Postgress or Reddus or
one of these other ones if you're
integrating it into an existing existing
system. For instance, with Postgress,
you can put it into a table and then if
you have another application, you can
just use Postgress with like your OM or
whatever to get that messages and
display it. For instance, if you had a
chat UI or some like a dashboard you
vibe coded, you could just query
Postgress and put those messages on
there as one uh example. But the biggest
difference is just that this is
abstracted. We do everything in Naden
for you. With Postgress, it just goes
and saves those messages to a table.
And now with memory here, the chat node
gives you a session ID
and then it just passes that in to the
simple memory to remember it.
And I guess this is a good point to
mention expressions. If you have not uh
seen this before, some people walked in
uh right be since you should get on this
for anyone who walked in uh after we
started.
This notion page is the home of
everything we're doing right now. So, if
you haven't gotten to this, I'll have it
up for five more seconds. Please scan or
take a picture of the
All right.
So,
in NAN, you'll see these brackets and
the green stuff. We call that an
expression.
So you can type things into fields just
and then that's just a static value.
It's always just going to be that
keyboard mash. But if you change it to
expression,
this is still just going to be a static
value. But anything that you put inside
of these curly braces is JavaScript. And
you'll see some suggestions here. We
give some um convenience functions. For
instance, like now it'll put the date
time. It really is just anything
JavaScript works here. You can say uh
like math do random and it does that
function.
But what people use the most for this is
of course you can just take a field.
This is from the trigger node and you
can just drag a value and plop it right
in there. Great thing about this, if
we're building something other than this
ID, you could go in and it concatenates
everything, puts it into one one field.
And now we have an agent that will work.
You can go and chat with it, and you're
essentially just chatting with the
provider. But we want this specifically
to manage our uh email and calendar bot.
So what we need to do for that is add
those same nodes I put on that simple
canvas that said did you have a
question? Sorry I thought you raised
your hand. Put those same nodes on to do
those actions.
But the difference is with an agent
instead of putting them at the end here
just as a different node we can just
give them as tools for the agent to use
by itself. Every node that we have
in the regular tool like Google count
contacts, Gmail, you can use as a tool
which makes it this little circle node
and then the AI agent can just use this
node at its discretion. So uh for
instance, we can say send a message
and then these little buttons right here
let the AI fill it in automatically.
And uh does everyone here use Gmail for
their uh work or for their for their
personal? Otherwise, uh Microsoft isn't
quite as easy to set up with. But just
go go ahead sign in with Google.
I did not mean to flash all of my stuff
there. But oh Jesus,
is it going to break the recording if I
unplug my uh computer for a second? It
will. Like can I plug it back in after?
Okay.
I'm going to connect my Google really
quick.
So, while I'm doing this, you can go
ahead and also click that and uh get
yours set up,
which should just be a one-click
install.
And my browser crashed.
>> That's the worst thing that happens
today. We're doing okay.
Yes, it's me.
All right. Does everyone have their
Google connected?
>> That worked for everybody. Probably took
you less time than me.
Okay, we good on the recording.
Okay, so now you should have Oh, it
connected three times. Okay, great.
What um what trips a lot of people up
about NAD if you haven't used it before,
if you click this, you're going to edit
your old connection. If you want to add
a new one, you need to click in here and
say the add new credential.
And we just authenticate a Gmail. We're
also going to use Google Calendar.
So, you have to sign in with Google with
that one as well.
And now those will be connected and it
should work for everything that we need.
So now we essentially just want to go in
and set up these these tools. So we're
going to want this agent to be able to
read our emails, search our emails,
archive emails, um send messages. So
essentially, I'm just going to go ahead
and do that. You guys can go ahead and
do that, too. If you have questions, hit
any troubles. Uh, what you will need to
know when you do that, you this button
right here lets the AI set it.
And I guess this is this is important to
cover because
in a lot of like let's say cloud code
for example, if you give it access to
your Google calendar, it's essentially
able to go in and do whatever it wants.
It has to go and make those API calls.
when we're giving a something a tool in
NADN,
it has every single field individually.
So it can only set the things that we
tell it to specifically. So we could,
for instance,
have the subject set, the message set,
and only let it set the two field. And
since that's the only thing that we
have, you can actually see how this is
set up. it puts this helper expression
in here. This is the only field it can
do. So, it can never change the other
ones.
So, that's one side of the double-edged
sword. The other side of the
double-edged sword is that it means we
have to set up all the fields. So we
have to go in and say subject defined
message defined to defined which you can
click that button but you can also say
from AI like this using this expression
and it will work. The reason why you
wouldn't just always click this little
magic button is because sometimes you
want to mix stuff together, right? So
imagine I'm going to get a test value by
saying a message like what's my latest
emails?
You have to have that set.
What's my latest emails?
And I can stop that.
And now, not only can I uh
can I put in the
from AI and then put in the field name,
which this lets the AI even though it
says undefined, that's just because it
doesn't have a value. Now, when it runs,
the AI will provide a value. You could
hardcode something else in here like you
can say responding to message
And then you can type as much static
text as you want, but you can also
reference other fields like chat input
right here. So if you want to be really
um transparent about what you're doing,
you can be like this is an AI responding
to message this. And then you can just
include that in your email or whatever
you're setting up with. So that's why
you would use the from AI if you want to
template it into text like that. For us
right now, I just want it to do
everything here.
And let's see, is this set up correctly?
Send a message.
Perfect. One other thing you need to
know with setting up your tools is
the prompting. This is something that I
see people messing up in NAN all the
time is you need to name your nodes
really well. So, this automatic name is
pretty good. Send a message in Gmail. I
would even just rename it to send a
email
and then the tool description where it's
set automatically. You always want to
set it manually and describe the tool
and prompt it here. This is passed in to
the LLM to show it what tools are
available to it. So every LLM call
essentially and this is how tools work
under the hood for every platform. The
AI can see a list of all the tools with
their names and descriptions. The node
name
is the tool name. The node description
is the tool description. So you can
actually put in full prompts here. So
what I do a lot of the times instead of
adding the system prompt inside of this
AI agent, which sorry I I didn't show
you that yet. I'm getting to it.
I'm sure we're all familiar with the
system prompt being that we're at AI
engineer conference.
uh in here the in the system message
that's where you would normally put all
of your different stuff but I like to
make it a little bit more modular by I
only put my like email
prompts like oh don't use m dashes don't
do whatever in the actual description
which maybe some people would disagree
with that approach I really like it
because it's modular I can copy a tool
from different workflows and it will
just
Um I'm sure people are probably ahead of
me now in from a tool perspective of
adding them. Uh which is good. And if
you fall behind like I am here again you
can come into this notion page
and inside of here you can cheat copy
and then you just command V and it
pastes everything in.
And while I have this here so that you
guys don't have to
sit through me
writing a giant prompt and spell every
spelling everything incorrectly. Um,
I'll just paste in the prompt I wrote
last night right here and kind of walk
through the uh the anatomy of it a
little bit while you guys fill out those
tools.
And all of the different boxes in NADN,
you can always expand them up to be full
screen, which makes it a little easier.
So, as I'm sure we're all aware, you
want to tell the AI in the system prompt
essentially who it is and what its
purpose is. I like to keep them pretty
simple and just add stuff as I need to.
So if a tool isn't being called,
something's not happening, you just come
in here and you tell it to change. So I
gave it a brief list of how to behave,
like ask instead of hallucinating, all
that kind of stuff. And this is really
important. I'm sure we've all
experienced this. You don't want to send
a uh you know two lead name to an actual
uh
um prospective client. That's really
embarrassing
which we say right here. Don't use the
placeholders.
Um and also LLMs usually don't know the
time. So you'll say what's today's
emails and it'll say you have no emails
on January 2023. And it's like what? So
if you use that uh convenience function
here which why did that change back
that needs to be an expression
and then you'll see date time and it'll
show this evaluates to this on the side.
Any questions from anyone? I know I've
been jumping around a little bit. We
still all working on getting tools
placed. Okay, good. Good. Good.
And then I will cheat. And I'm just
going to copy these.
I guess I could have dragged them, but
paste them here.
A good tip uh when you're setting up
something, set up the first one. get
your authentic authentification set up
and then instead of making a new one and
setting the values, just copy and paste
it because then that field is already
set inside of it. Um, saves a little bit
of time having to click the the little
button every time.
And then another uh
little prompting trick is inside like
when you set this here you there's this
button here that says add a description.
And then this
does what it says. It adds a description
to that field with the AI. You'll notice
sometimes there'll be a field that
maybe it picks the wrong thing. Like for
instance in Gmail thread ID, maybe it'll
put the message ID or something like
that. You can add in a prompt here and
you can make this as long as you want.
Tons and tons of lines and it's fine. So
if something happens where it passes the
wrong value or something, this is just
yet another box where you can steer it
to go into the right direction.
Something else you can do if something
like uh let me find a better example
than thread ID
maybe.
Oh, a great example great example is
when creating an event in Google
calendar,
the name of
the uh let's see where is it?
summary is actually the title which is
extremely confusing even for all the
humans using Gmail. We should probably
change the name of this to title, but we
just followed what Google's
um API names were. When you set this,
what you should do is add a description
and say this is the title of the event
because summary, it would just put a
summary of what the event is, of course,
but this tells it this is the title. You
could do even one better than that and
click this and you see the automatically
generated key right here. You can change
it from summary to just a title
and then AI will go in and fill title
from there.
Now I'm going to test it. See if it's
working.
I have some fields that aren't filled
in.
Does not have access to the credential.
Okay.
Sometimes when you're working inside of
a project and you make a credential
inside of the project, remember projects
are these things on the sidebar,
you'll get an error saying it doesn't
have access, which is really confusing
because it looks like it does. If you
ever run into this, all you need to do
is go to your home
and then in credentials you can share
them. So say share and then you share it
with the project.
See
another example of double-edged swords
where you're keeping it. Um
okay, this one's already hounded by it.
All
right. And now my scaling is making this
a little funny, but
When we
ask it, we can what's on my calendar for
today. We can see exactly what tools it
used. It's used get many messages.
And then if we click into that node
specifically,
we can see the exact output from that.
And in the bottom here we have detailed
logs of everything that happened as
well. So get many messages. The input in
the search field was after 26 408 and
before tomorrow.
And then in the message we just got a
summary of what these are
which this was me worrying because was a
lot of people stuck in the line outside.
There's a big line out there. Maybe you
guys got in early.
Is everyone at this point where they're
able to chat chat with it or are we
still putting tools?
We're all right. All right. Great. Then
at this point, I'm already a little
nervous testing this with my real
account because
I don't want to send an email to anyone
by accident or reply by accident, right?
And I'm sure you guys are like, I don't
want to say send an email and just have
it do it automatically.
And that's pretty much the whole point
of today's presentation
is we made it so so easy to add uh a lot
of peace of mind here. So everything
that we would consider like destructive
or sensitive, we can add a human review
step. And let's see, that would be send
an email reply. I'll just drag them to
separate them. Send an email.
create event and then I would say
archive email would be borderline. I'm
going to let it archive my emails. If I
miss an email, not that big of a deal.
So now all you do on this branch right
here,
there's a trash can and a plus.
If you press the plus button, it brings
up the human review and you can just use
the chat platform you're we're using.
We're using the native NAN chat.
And then this makes this little human
review step right here. And now it is
not possible. It just cannot get past
this layer. It can't use this tool
without going through this chat.
And we can give it options like what the
approve button would say. We can change
this to say send. Uh and we can also add
a disprove uh disallow button.
And then we can block user input. But I
like to leave it off because then you
can just respond to it and responding to
the message will deny. And now we can
see what this looks like and say uh
send a test email to
hopefully it listens.
And we got an error when it hit it. We
can see it went and used it, but we got
an error. Response mode in the chat
trigger must be set to using response
nodes. Another tip, a lot of people
really they see something red pop up and
like, oh my gosh, if you read the error,
it usually tells you what the problem
is. Uh, honestly, and a lot of
painstaking work goes into the engineers
write these messages themselves or maybe
how's Claude do it these days. But let's
see. Response mode in the chat trigger
must be set. So, inside of the chat
trigger,
let's see, under options, there's this
response mode.
By default, it's set to streaming. And
you'll see that the words come back one
at a time in that chat screen. But for
the chat nodes to work, we need to set
it to using respond nodes. And that just
essentially does what it says. Instead
of it streaming back right from the LLM,
we are controlling what messages go to
it using nodes on the screen. So that
would be a node like this human review.
We also just have these um
regular chat nodes in here where you can
just send a message. That's the wrong
one.
I'll show you this because it's very
cool. chat tool where you can just send
a message in the chat with a tool which
you can do some cool stuff with.
Uh but then
now we actually when we set that we need
to also it won't respond at all unless
it's through a chat node. So we have to
add a chat node after the agent as well.
Send a message.
And right now you can see that's blank.
Uh I think this is JSON dot
uh message. It might be chat output.
We'll test it though.
Say hi.
And it'll come back.
And what's the output?
It's hanging now. That's another demo
syndrome.
Okay, I'm going to deactivate this node.
Send a message. So, it's always good to
have test data in there.
I think the problem was this was
undefined.
Okay, it's output. It's not message. So,
then we can just drag this right to send
a message.
Now, we can test it again and make sure
we get a message back. And then we can
see it doesn't stream back. it sends it
back in one chunk.
Does that kind of make sense? I know
that can trip people up. You just have
to respond with nodes at all time.
Something else you can do cool with that
as well is set like if branches, right?
So you can check something in that
message with an if branch and have
different conditions of how to respond.
But we don't need to worry about that
right now. We're just responding with
that. And now this will work again. We
can go back to testing and say
send a test email to.
All right. And now we can see here in
the chat
if we can scale this up the agent wants
to wants to call send an email. And if
you're looking at on that on your phone
you're probably going to say okay
and because obviously that's not really
showing us anything.
So we are going to press decline because
I want to see my message.
And when we click into the human review
node, now that we have that example, we
can see where that came from. In this
message, the agent wants to call
tool.name.
In this field
we can use this tool um convenience
function
by saying
money sign tool dot and then parameters
which every field in nadn that's called
the parameter under the hood.
If you ever get this object object the
people who work uh in JavaScript will
know will know what that's about. But
you can say two JSON string as a tip to
see what the output is. And even just
this right here would be would tell you
the information that you need to know to
the human review step. But obviously
that's kind of ugly. So what I would
rather do is say
to
and this can say dot
message or two, right? And we don't need
this to JSON string anymore.
from. Well, not from subject
tool dot parameters dot
subject
message
tool dotparameters
message.
And now we can see that uh the agent
that message will be something we can
actually reasonably approve or deny.
And I will actually just rename this to
the agent wants to send an email. Great.
And now I'm actually going to publish
this so that I can see it in the chat
hub.
I'll go over here
and
I'll say again send a test email to
I'll actually uh I can't open my email
unfortunately whatever
mcg
and it comes back and says the agent
wants to send an email and does all of
that and we can see it and we can send
it or decline it. And you can also deny
it by
just responding. So we can say I'd
rather the uh the message be markdown.
Write an email that has
different markdown features.
And then that denies it and it'll pretty
much just try again.
It didn't listen to the markdown because
it listened to the tool uh description
much more. Uh but you can see how that
works. And then I can go ahead and send
myself this junk email.
And there we go.
Hope that kind of shows how powerful and
and cool this is because
that is not able that tool can't be
called without going through that. It's
just in the way. We at NAND made that
layer to just intercept it in the
middle. And one of the really cool
things about it is it doesn't even
really know that there's a human review
step there. So if you have your tools
working and you add a human review step,
it's not calling that human review step.
It's calling the tool and we're
intercepting it. Uh like a lot of things
in AI, that's also a double-edged sword
because AIS will typically
be um wary of that. You know, AIs that
are a little smarter, they typically
won't just send an email without asking
unless you specifically tell it to. So,
what I found is that sometimes in the
descriptions
uh in these prompts, I'll say
this won't send automatically.
Don't be afraid to send a message.
Message there is a human in the loop.
And that usually fixes it because it'll
be like, okay, it won't just be blasted
out. It will be used,
right?
So
you can also if you're really lazy like
I am sometimes
you can actually put multiple
multiple tools under one a under one
human in the loop. So we could put like
the draft one under here as well and
then it will intercept it for both
without anything having to change. It's
just the fields are different and we
made a custom message for it. So, we're
going to write we're gonna add a
different one. But laziness still
prevails. So, I'm going to try
something. We'll see if the demo
syndrome
uh hurts us here.
And I'm going to say add human
in the loop just like it is on send an
email to
the
and this is the NAD
AI builder. Let's see. Let me make sure
this prompt is good. Add human in the
loop just like it is.
uh name the params and everything to
match the tools.
I found what helps a lot is you if you
have a lot of things that repeat, you
can make one and then just say, "Okay,
do this over there as well." And you
don't have to really click through.
It'll actually do it faster than you're
able to.
And we have this on um cloud and
enterprise. It's not on self-hosted yet.
We're working on getting it there, but
we did just release an MCP feature uh
where you you can hook it up to cloud
code or whatever agent you have and it
can do the same functions that this has
just through the CLI with the MCP.
And did this work? It looks like it
might have. Validating the workflow. We
can click in.
It looks like it's working. Okay, great.
So now I'm going to publish this Let's
say I'll go back to chat hub because
it's a little nicer to see here.
Um, add a calendar invite for calendar
for lunch today
noon and email.
Oh my gosh, I don't know my own email.
asking if he wants to go.
Send. Looks good to me. Wants to create
a calendar event. Lunch. Oh, that's kind
of ugly. Okay, so I'm going to create it
because it won't change what's actually
in there. But we can fix that. Let's
make it better.
And this makes it so nice for testing
because you can do dummy events and
actually
see if it's going to the wrong person or
doing the wrong thing and you can just
decline it. Uh so you know you won't do
anything by accident.
Um
remember in the beginning when I said oh
you can see what goes wrong and
everything. In this executions tab you
will see all of the times it was
executed. uh it marks the test ones with
the flask, but we'll see that that
execution from chat right here, we can
see it went into the human in the loop
and then it went down and created the
event. If you click copy to editor, we
can now work with this data in here. So,
if we click into the tool,
we see these dates that are super ugly
here. And now, this is where the
JavaScript really comes in handy. If you
don't know JavaScript, you can just go
ask a chat to tell you format this date
for me. But we can just say to
date time and then dot
format
uh and I think I can do dd
t
cannot convert. Oh, why not?
Let's see.
Oh my god, I tried to convert lunch to a
date time.
We I we can't blame uh the demo
luck for that one. Okay. And then see
now it knows that this is uh compatible.
So when you press the dot to date, time
just already comes up. And if we press
the dot again, format already comes up.
And the very nice engineers at NAN went
in and added docs for us in here. So we
can see what all these things do and you
could even say like C and minus they
show you code examples and everything.
It's it's very nice to go in and read
it. I know we're tempted to just go ask
Claude everything right now, but if you
read the things on the screen, I promise
it it is very helpful. But if we'll
format this and say capital D,
I think. Yeah, there we go. Nice. If you
add a couple more D's, it just becomes
even nicer.
D and then T T.
And this is, if you're wondering what
this is, this is just uh the Luxon
date functions. It's just the date
library we we use
is what this ddt
I just have written it enough times to
remember but you can just ask uh claude
to format it
for nad and it'll do it. So now that
looks much better. That's much more much
easier for us to approve without having
to read a UTC
uh a time stamp. So we'll publish it
again and say
put dinner on the cal47.
There we go. It's fixed. And we can see
how easy that is to go in and tweak and
play around with everything. Does this
all
make sense here? Any questions? It
doesn't have to be specifically related.
Oh, and there's an email coming through,
I guess.
>> Only a month.
>> Only a month.
>> Oh, really?
Only a month. Are you on cloud pro when
you select it? Yeah, when I select it, I
can only for month
>> I will go and make a new one right now
or
>> check after I'll make a new one so I
don't leak how to how to create coupons.
>> Yeah. So, I'll put it up I'll leave it
up for 24 hours
>> and then I'll remove it.
>> Sorry about that.
>> Fun thing. I actually made an entire
discount system like the our coupon
generator at NADEN is created entirely
in NANE and it abstracts all of the
different coupon systems we have across
merch enterprise giveaway stuff uh cloud
it all has a single entry point with a
REST API that goes through Nadn and it
has all the um
uh audit logs and all that it's really
interesting and I built the entire
system in like six hours. So, it's it's
really really powerful stuff.
>> Yep.
>> Yeah.
>> Oh, did you mind waiting for the the
mic?
>> Thank you. Uh you mentioned MCP server.
Uh because um up till late there was an
unofficial one on GitHub that I've
actually been using so far and it's been
working great with cloth code. Uh I'm
just can you share a little bit more
about the native MCP server that you
have and if it's available?
>> Yeah, absolutely. So, uh, this is
really, really exciting. Um, you should
just be able to go into settings
and right here, instance level MCP.
If you click in here, you can just
enable it and give it access to
workflows. So, um,
let's see what we have here.
Workflows that are published or have a
web hook, form schedule, or chat
trigger. So that should be ours.
Email and calendarbot enable. You have
to give access per workflow.
Um which you can do up here as well and
say settings
available in in MCP. That's just so that
if you connect it to your thing, it
won't go and change the wrong workflow
by accident. It has to be enabled.
And now in that MCP
um thing you can say connected clients
uh or how do you connection details
you just put in your server URL in OOTH.
So in in uh let's see in cloud
I'm almost afraid to to open my cloud
but we are a official connector in
cloud. So you could just say connect
nad. You put that URL in. It'll connect
with OOTH. You just press log in. Or if
you um are doing access token, you can
copy that here and you uh will copy
this, paste it into your configuration
file and replace your access token with
this. And it does all the same things
that that MCP does, except we didn't
have the limitation of having to work
with the existing API we had. We built
it right in. So, it does it does all the
same stuff. I would say you can try both
out and see, but ours is is going to be
adding more and more over time. Um,
that answer your question. I guess I
didn't really go into that much detail,
but essentially it's able to create,
read, do all that. It's actually also
able to execute.
So you could say to M, you could say to
Claude,
"Run my
email and calendarbot and it will send a
chat message to it and it's able to
interact with it." So that's something
else I don't think uh Roman's MCP can
do.
>> Yeah. So So that's something that our
MCP is able to do.
>> Any other questions? It can just be a
random question like that too if you
have any MCP stuff. Yep.
>> Oh yes. Sorry.
Thank you. So um assuming I want to
build a a companywide workflow, right?
And I want to have specific human in the
loop from specific departments for
specific actions if that makes sense. Is
there a way that I can log and see where
um the work work the whole workflow uh
delays? So like a heat map or of logs of
who takes longer to to to respond
>> like that.
H who takes longer to respond? That's an
interesting use case. Um I was going to
say we have lots of we have like audit
logging functionalities in our
enterprise plans, but that wouldn't be
something baked in, but it's something
you can make with with NAD because what
happens with this uh I'll I'll show you
really quickly. This still says waiting
even though that's not true. But I will
say
send an email to that same other email.
Do anything just test.
So if we
Okay. So now what happens is this
workflow that's the wrong thing.
This workflow goes into a waiting state
and you can see it here. And then once
it resumes it shows finished. You can
use a N8 end node
to get the execution and it will show
when it started waiting, when it stopped
waiting. Um, and then if you have your
Slack connections and everything, it'll
show all those details. So it would just
be a matter of parsing that data. So
it's something you can make separately
in NAD, aggregate the data together.
That's an interesting use case. I would
I'll write that. I'll I'll think about
that because audit logging human in the
loop is is something that we should
definitely really get polished. Let's
see. Time check. We're at uh 11:50. I
want to show you guys one more thing
specifically to set you guys up and that
is
converting this to slack. Right? So, uh
if we take did anyone have any other
questions that before we do that? Okay.
So, I'll just add Slack here. Does
everyone here use Slack or Google or
Microsoft Teams? Hopefully, no one uses
Teams.
>> Slack. Yeah, I figured it would be
mostly Slack. So, my personal agent I
use for myself, um, I use Slack. Uh, and
it's really nice. I even have it set up.
So, right here, I put in a Slack node to
add a loading animation, which is a GIF
of a something dancing. And then at the
end after it responds, it takes the
thing away. So it even has like a
loading indicator. Uh it's it's really
nice. You can go in and just replace the
trigger and this response with Slack and
do the same thing here where these go
through Slack.
So that all works the same way you saw
on ChatHub. It would work in Slack.
Something even cooler though, or
depending on what you think is cool, I
suppose
instead of having this run
just when you message it, imagine if we
just added a schedule trigger,
and had that run every hour, once per
hour, and added a prompt there to the
schedule trigger
that says,
"Clear my inbox," or whatever. ever then
it would run
once per hour do those actions and these
can be connected to Slack to just ping a
channel so it's still human in the
looping for everything but just running
in the background you don't even have to
initiate it so you can imagine all the
things in the background what I use this
for if there's a GitHub issue or a PR or
something I have it come in I I have it
go through scan the scan the code do
whatever and send off messages to people
asking them details that I know I'll
when I read through it and then I just
have the message come to me because I
don't want to AI message co-workers or
clients or anything without seeing it
first.
Does that make sense? Yeah. And all of
that is actually in this notion document
as the next steps here. I uh in the next
step you can give it memory so it can
persist memory through oh sorry you can
hardly see that but if you're in the
notion document you can see you can give
it persistent memory it will remember
across sessions um I give you everything
you need to set that up this is the
instructions to go through and make it
autonomous where you can still chat with
it through Slack but it also runs hourly
and has everything set up um and And
that's all in here for you to experiment
with and expand this past which
hopefully I've set you up decently uh to
be able to do that. We have 10 minutes
left and um instead of starting the next
thing I would just like to answer
anyone's anyone's questions or just chat
about what's coming next for NAN what
you want it to be anything like that. So
any questions I would be happy to take
Yep.
I want to ask uh about the human in the
loop executions.
Uh my case is a self-hosted instance uh
in which we have a limit on concurrent
executions. So
>> I was asking whether um waiting
executions count as um running
executions because for instance if you
have a 10 limit on uh concurrent
executions you may
um
be become stuck because maybe uh 10
users um just don't respond. Yeah,
I don't know the answer to that. I don't
think it does, but it might. I'll give
you something um you can do to if it
does count, this will make it a little
less painful. You can limit wait time.
So, you can say after 10 minutes,
automatically deny it, right? So, then
you won't just have them piling up
indefinitely if someone just misses it.
I know like that just happens sometimes.
And then it's not like okay we're
inevitably going to hit a point where we
have have this run out. So you can set a
time limit. Do you know the answer to
that?
>> I don't know.
>> Yeah. So um we can follow up with you
for sure. I can find out uh after the
session.
>> Thanks.
>> Any other questions?
Uh hey yeah so in a team setup where you
have multiple people potentially working
on the same workflow and so on what's
the like approval process and do you
have something similar to like a normal
PR flow where you have someone who has
to go in and approve the changes and so
on to make sure it makes sense for the
context right
>> yeah so you could have in the trigger
and this is what's great about it all
being so customizable so you said
Microsoft Teams Oh. Oh, if you have
teams.
>> No, but
>> inside of a team. Yeah. So, what you can
do is the trigger, let's say it's Slack,
it can take the user ID and then the one
that responds it responds to it just
references the user ID to respond to
from there. But then, let's say that
this tool is requesting vacation days.
Obviously, that shouldn't go to the
person who asked, right? So then that
Slack message you can just change the
two field to whoever that decision maker
is or whatever channel that is and then
they can press approve or deny. Does
that is that what you were asking?
>> Not really.
>> Oh, sorry. What was the
>> but but it's a good good additional
thing. No. Uh my question was more
around like managing workflows in
general. You have a you have a project,
you have someone who initially sets it
up and then you invite some other people
onto your team plan uh who also are
supposed to help out maybe adding some
nodes, tweaking, maybe you're on
vacation and so on. Do you have some
sort of approval process within the NAD
platform that says hey I made changes
like I branched out from this made
changes I want to push this who can
accept this and so on.
>> Yeah. So the answer would really depend
on if you're enterprise or not. Um
assuming assuming it's not an enterprise
plan. That would be just a matter of
workflow design to do that and then just
managing that internally of you know you
make a copy of it and then whoever's in
charge of managing it will replace it
with those those changes. If you are on
enterprise there's a whole environments
and git feature which is exactly that.
It has git integrations. You can have
multiple environments. So you can have
dev staging prod and you can have people
managing that and specific approvers the
but in terms of multiple people using do
you mean multiple people using the same
workflow or editing it?
>> More editing.
>> Yeah.
>> Yeah. That's something that can be that
can be
tricky with with branches. like if you
wanted to like have a feature branch or
whatever, that would be something you
would need to copy with to just copy it,
bring it back, make the changes or um
use enterprise and use the the git
integrations. That did get a whole lot
better recently because there's now the
there's not full two player yet where
you can see two people working at the on
the workflow at the same where you can
work on the workflow with another person
live but at live updates in the
background now that we have autosave.
So, like if you're working on a workflow
with another person remotely, you can
see each other's like moving stuff
around and stuff like that.
>> Thanks.
>> Yep.
All right,
last couple questions if anyone has
anything. Yep.
Um what about uh human in the loop um
for cases um in which you have no uh UI
because I saw that um it shows two
buttons like accept and decline. But if
you I guess that if you just respond
accept
to the LLM, he cannot just execute the
tool.
>> Exactly. So um in cases like um a phone
call uh which uh provide um has no
buttons to click, you
expect the agent to uh ask for a
confirmation. for instance, uh on a
phone call with an agent that books
appointments for you and maybe he just
uh ask for a confirmation before doing
that. So uh can it um handle such a
situation in which uh the prompt should
suggest
which button to click? So, I'm not sure
if we'll ever have um the the because
that would require the LLM deciding if
it's approved or denied, which the
entire, you know, purpose of this is
human review. It cannot get passed
otherwise. So, that's a that's a brick
wall. DMZ, nothing getting past it,
right? That being said, um right now
it's only chat platforms. I would like
us to also have the ability to say
custom and it gives you back web hooks
because under the hood what it's doing
is it's just making an endpoint that
then those chat platforms send API
requests to. I would love if I just had
those two API links which it just puts a
unique token so it knows which is which
and then you can integrate it yourself.
So hopefully that will come eventually.
But for your specific use case, what I
would say is you can use a subworkflow
and do that logic manually. So you can
make a subworkflow and you can have the
action where it goes in and actually,
you know, asks the question, you get it
back and then you just do an if node if
it's approved, if it's not, and then you
have two branches based on that. And you
could do that in a tool with the execute
sub subworkflow. And you can just name
it confirm and then it can respond true
or false or whatever it needs to do. So
you could do that like abstract away
that into a tool. It would just be
workflow design instead of the unit
review step. Does that make sense?
>> Great.
>> Thanks.
>> All right. One last question.
>> Yes. uh let's say you design a workflow
in uh and and and you want to um to use
it as an API and call it from someplace
else like in my company we have we are
able to deploy Microsoft stuff the rest
is complicated but use it as an engine
and then just call it and hide the is it
that is that possible
>> absolutely I make um full rest APIs and
n all the time and I make you know the
fancy uh like swagger docs and anything
like I just like I mentioned with the
coupon generation. I made that whole
coupon tool. It's a REST API so that
other people on our team can integrate
into their NAND workflows and into the
external tools. And I made all of that
and then just gave them REST API docs
and it's all inside of NAND and
everything's managed inside of there
including all the human in the loop and
everything. So um I hope that answers
your question. Absolutely. You would
just make a web hook trigger like this.
And then you get a path right here. And
you could do restful names too. So you
could do like user
and then like I don't know
post to create a user for instance if
that makes sense.
All right. And I think that's pretty
much all the time we have. I hope that
this was helpful and showed you new
things and that you learned stuff and
that you will go later and expand this
to have much more than just Gmail and
Google Calendar to do all of the things
your heart wants. Um, one thing I would
say if you're going to add a bunch more
tools to this, use the sub agent tool,
uh, agent,
and then you can have one agent that
calls other specialized agents. So this
agent we just made can go to be a
calendar and email management sub agent.
And you can build these out as many as
you want. This one could be your GitHub
issues. This one could be your uh god
forbid Jira management uh agent and the
list goes on. That way you're not
adding so much context to just the main
agent and you can change the model
between each one. Each one can have a
different LLM optimized for its
different thing. Hope that makes sense
and I'm excited for you guys to try it
out. If you guys see either of us or me
at any other time during the conference,
please come up and chat. Uh and don't
forget to go and use your
>> device.
>> Yeah,
I was I've been pressing defer on this
for like the last month straight and I'm
like it's it's I'm like it's going to
force an update during the thing. So it
came up at exactly 12. So that's the
session. Thank you guys so much.