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.