AI Engineer

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

1081 summary words 5 min summary Watch video

Start with the signal

5 min read

Summary

30-second take

This is a live workshop teaching participants to build a Gmail/Calendar agent in n8n with human-in-the-loop approval gates. Liam (developer advocate at n8n) argues n8n's visual workflow builder + granular field-level control + execution logging gives you something most agent builders lack: visibility into what your agent does and safety gates to prevent costly mistakes. The core value proposition is "you can chat with everything via AI now, but n8n lets you see/control/fix what goes wrong and add approval steps without the AI knowing they exist." He builds a practical demo where destructive actions (sending emails, creating calendar events) require human approval via chat buttons before executing.

Key takes

  • Human-in-the-loop as invisible interception: n8n's human review nodes sit between the AI agent and tool execution—the LLM doesn't know the approval step exists, it just calls the tool normally. This means you can add safety gates to working agents without prompt engineering or changing tool logic.
  • Field-level security vs. blanket API access: Unlike Claude Code or raw API integrations where an LLM gets full access, n8n lets you control which specific fields the AI can populate (e.g., allow AI to set email "to" field but hard-code subject line). Each parameter is individually configurable with AI-set or static values.
  • Execution visibility as competitive edge: n8n's execution log shows every tool call, input/output, and waiting states. The speaker claims this transparency—knowing what failed and being able to copy failed executions to editor for debugging—is where "the winners will lie" in agent tooling.
  • Modular prompting via tool descriptions: Instead of one giant system prompt, the speaker puts context-specific prompts in each tool's description field (e.g., "don't use placeholders, there's a human in the loop so don't be afraid to send"). This makes tools portable across workflows.
  • Sub-agents for context management: For complex multi-domain agents, use n8n's sub-agent tool to call specialized child agents (email agent, GitHub agent, Jira agent). Each can have different LLMs and avoid polluting the parent agent's context window.

Useful details

  • Setup specifics: Workshop uses n8n Cloud Pro (gave attendees $600/year promo codes), requires v2.14.2+. Authentication is one-click Google OAuth for Gmail/Calendar nodes.
  • OpenRouter key provided: Used OpenRouter (supports any model) with shared API key for demo; recommends Claude Sonnet 4.6 for tool-calling reliability.
  • Memory handling: Simple memory node stores last N messages (default 5, recommends 50+) in n8n's backend. Alternative memory nodes (Postgres, Redis) let you query conversation history from external apps.
  • Expression system: Green bracketed text = JavaScript expressions. Any JS works inline (math.random, string methods). Drag fields from previous nodes to concatenate. Use $now for current timestamp, .toDateTime().format('DDD T') for human-readable dates (Luxon library).
  • Chat hub feature: New built-in chat UI in n8n sidebar (no external tool needed). Check "make available in chat hub" on trigger + publish workflow.
  • Practical automation example: Speaker's personal agent runs hourly on schedule, scans GitHub PRs/issues, drafts messages to coworkers/clients, sends Slack notifications for approval instead of auto-sending. "I don't want AI messaging clients without seeing it first."
  • REST API creation: Built n8n's internal coupon generator as REST API entirely in n8n (abstracts merch, enterprise, cloud coupons). Made in 6 hours with full audit logs. Use webhook trigger + custom paths for RESTful design.
  • MCP integration: Native MCP server now available (Settings > Instance-level MCP). Can execute workflows from Claude desktop, pass chat messages to agents. Speaker claims it does more than Roman's unofficial MCP (community tool).
  • Enterprise features: Git integrations, dev/stage/prod environments, credential sharing across projects (prevents accidental wrong-credential use), audit logging.

Caveats / counterpoints

  • Enterprise lock-in: Git-based version control, environment separation, and advanced audit logs require enterprise plan. Team collaboration without enterprise means manually copying workflows and managing changes ad-hoc.
  • Self-hosted limitations: MCP server and some newer features not yet available on self-hosted instances (coming soon). Projects feature also cloud/enterprise only.
  • Human-review rigidity: Current human-in-the-loop only works with chat platforms (Slack, n8n chat). No webhook fallback yet for voice/phone use cases. Workaround is building custom approval logic in sub-workflows with if/else branches.
  • Concurrent execution limits: Self-hosted instances have concurrent execution caps. Speaker doesn't know if waiting executions count toward limit (follow-up needed). Mitigation: set timeout on human review to auto-deny after X minutes.
  • No two-player editing yet: Autosave helps but no real-time collaborative editing like Figma. Multiple people editing same workflow remotely can see moves but not full multiplayer.
  • Tool description prompt weight: LLMs prioritize tool descriptions over system prompt, which can be good (modularity) or bad (less centralized control). Speaker's preference for distributed prompting may not suit all architectures.
  • Demo syndrome moments: Live demo had authentication issues, scaling display problems, waiting states not updating correctly. Functional but rough edges exist.

Ken relevance

High relevance for AI ops and agent workflows. Ken's building agent systems for clients and internal ops—n8n's human-in-the-loop gives you a safety net for production agents touching real data (customer emails, CRM updates, financial transactions). The field-level control and execution logging directly address the "agent accountability" problem you've discussed.

Specific opportunities:

  • Client deliverables: Sell agents-with-guardrails to risk-averse enterprises. "Your AI won't accidentally email 10,000 customers" is a strong GTM angle.
  • Personal workflow: Replace manual email/calendar triage with scheduled agent + Slack approvals (speaker's exact use case). Could save 30+ min/day on inbox management.
  • Content pipeline: Build agents that draft social posts, find research sources, etc., but require approval before posting. Modular tool design means you can reuse tools across workflows.
  • MCP integration: If you're using Claude desktop heavily, n8n's MCP lets Claude execute n8n workflows directly (potential glue layer for your toolkit).
  • Sub-agent architecture: Matches your thinking on specialized agents vs. monolithic systems. Could prototype multi-agent setups faster in n8n than custom code.

Lower priority: If you're committed to full-code agent frameworks (LangGraph, etc.), n8n's visual approach may feel limiting. But for rapid prototyping, client demos, or non-technical team members managing agents, it's compelling.

Watch verdict

Skim. The concept (human-in-the-loop as safety layer + execution visibility) is valuable and the architecture implications are worth understanding. But 40% of the transcript is live troubleshooting, authentication delays, and workshop setup. Read the Notion doc (linked in transcript) for cleaner step-by-step instructions. Watch the human review node setup (around mid-transcript) and the sub-agent explanation (end) if you want to see the UI in action. Skip the Gmail OAuth debugging and audience Q&A unless you're implementing n8n specifically.

Full transcript 10830 words · 64 min read
0:00

[SPEAKER_03] How's everybody doing?

0:14

SPEAKER_03

Is this everyone's first workshop of the day? You guys did one before? You guys have been busier than me. I'm Liam, I'm a developer advocate at N8N, which means I get to fly around the world and do really cool stuff like this and speak to people probably way smarter than I am about some really cool stuff. Today we have a pretty short workshop. Is this everyone's first time with N8N? Has everyone used N8N before? Raise it. Everyone has used it before? Haven't used it? Okay. Of those people who used it, entry level, power users, what would you guys say in terms of... [SPEAKER_05] Always at the beginning.

0:56

SPEAKER_05

Always at the beginning. [SPEAKER_03] Okay.

1:00

SPEAKER_03

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. We're going to make an 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. We'll essentially be making a really simple Google Gmail and Calendar management agent that can go and manage your schedule for you. Out of the room here, because I'm not sure what to expect with this conference, is there a technical level from this room, just from really high—you can code down here, you don't know how to code—JavaScript experience from this room?

1:41

SPEAKER_03

Yes, no, maybe, yes? Okay. [SPEAKER_02] I can do another JavaScript. Well, one of the great things about N8N is you don't need to know how to code for it.

1:55

SPEAKER_02

[SPEAKER_03] It's a visual tool, but you can break out into code wherever you need it,

1:58

SPEAKER_03

even directly in each field. You can write one JavaScript method. You can write dot to uppercase and it just works. Right? So 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.

2:27

SPEAKER_03

It's so easy to build agents right now. 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 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 link on your computer.

3:10

SPEAKER_03

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. Alright. And is anyone still waiting on this link here?

3:44

SPEAKER_03

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 N8N.

3:59

SPEAKER_03

So, you can go into this link right here.

4:04

SPEAKER_03

Register for an N8N 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 today or tomorrow. Because I'll remove these codes after. I got you guys a year of Cloud Pro, which is a $600 value. Which we don't do very often.

4:31

SPEAKER_03

I like to be generous. So, you guys can go in and use that. You get a year for free. So, I'll just give you guys a minute. If you already have your own N8N instance, if you use it already.

4:46

SPEAKER_03

If you use self-hosted and you have credential setup and everything, that's great. Just make sure you're on 2.14.2. Latest stable version. If you have your own cloud version, make sure you're upgraded to that. If you have 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 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 N8N, do you use it at work, just personally for fun?

5:23

SPEAKER_03

[SPEAKER_05] Both. [SPEAKER_03] Both?

5:29

[SPEAKER_03] Is that usually the consensus? [SPEAKER_03] Are you guys the ones who are bringing it to your job at work? [SPEAKER_03] Yeah. [SPEAKER_03] Yeah? [SPEAKER_03] That's great. [SPEAKER_05] For example, use Kraytler for me is very handy every day. [SPEAKER_05] I use it so the day I can buy news with the sources and everything. [SPEAKER_05] Yeah. [SPEAKER_05] For example. [SPEAKER_03] That's great. [SPEAKER_03] That's great. [SPEAKER_03] If you guys need help using it at work, need help convincing your bosses, we got two guys [SPEAKER_03] over here who that's what they specialize in.

6:02

SPEAKER_03

So you can find them asking me the nerdy questions.

6:07

SPEAKER_05

[SPEAKER_03] You can ask them the boring questions.

6:08

SPEAKER_03

Oh, for sure. So another thing, I want to make sure we're not really leaving anybody behind. Down here there is a screenshot 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 N8N is you can just copy and paste stuff

6:15

SPEAKER_05

[SPEAKER_03] into it. [SPEAKER_03] Over here, that's what they specialize in. [SPEAKER_03] So you can find them asking me the nerdy questions. [SPEAKER_03] You can ask them the boring questions.

6:28

SPEAKER_03

Oh, for sure. So another thing, I want to make sure we're not really leaving anybody behind. Down here there is a screenshot 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 N8N 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.

6:49

SPEAKER_03

Try to follow along, but 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. And if you have a question, whether it's 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 expand this yourself afterwards. How's progress on setting this up? Are we getting closer for, can I get a show of hands of who still isn't set up in N8N? Everybody is? I'm just upgrading my local one, for example. Okay. [SPEAKER_04] It's on 260. You should be okay.

7:31

SPEAKER_03

I just, there's been times where people are 60 versions behind in a workshop. But if you're self-hosted, you probably don't need the... [SPEAKER_05] So at work we have our cloud one. Okay, great. But I want to do this one. Oh yeah, that's fine. I'm just going to give a quick intro to N8N as well. So...

7:57

SPEAKER_04

[SPEAKER_03] This is the demo one.

7:59

SPEAKER_03

So for those very new to N8N... Is this very hard to see for everybody?

8:10

SPEAKER_03

I can...

8:14

SPEAKER_05

[SPEAKER_03] It will make me very sad, but I can turn on light mode.

8:16

SPEAKER_03

Ugh. Gross. Ugh. Okay. Sorry to the people watching on YouTube.

8:25

SPEAKER_03

[SPEAKER_05] I know you're ugh.

8:31

SPEAKER_03

At least that's how I always feel. So this is N8N. This is the interface. If you're on self-hosted, you don't have these projects over here.

8:48

SPEAKER_03

You just have your personal space, which is fine. On cloud and enterprise and all those, you get these specific projects.

8:54

SPEAKER_03

A 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 credentials by accident.

8:58

SPEAKER_03

And you can share different people between the different projects to have good access control.

9:00

SPEAKER_05

[SPEAKER_03] We can make a workflow here and we'll build this manually.

9:01

SPEAKER_03

N8N started in 2019 before ChatGPT came out. Back when AI was much more boring than it is today. Back then it was just 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. 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 lead. And then that will be name. And then the native N8N form will come up here. You can say, my name is Liam. Right? So that's a trigger. There's also stuff like schedule and hundreds and hundreds of others.

9:51

SPEAKER_03

There's webhook and API calls and everything like that.

10:01

SPEAKER_03

So you have a trigger. And then there's actions. Things that happen in other apps like Google create a contact, send an email. 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.

10:27

SPEAKER_03

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 ChatGPT 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 would 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.

10:48

SPEAKER_03

Of course, now we do it a little bit differently. And now we can start to follow along. If you weren't already, 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 N8N, you can integrate to many different things. Like for instance, you can add a Slack trigger. So Slack and then in the trigger, like on message received, on message posted to channel, you can have it start that way.

11:30

SPEAKER_03

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 where you 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 chat hub.

11:56

SPEAKER_03

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 N8N. You don't have to connect it to an external tool if you don't want to. It's just easier to use it right in here. I think that's this one right here. This is that chat trigger we put in 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 checkbox that says make available in chat hub.

12:43

SPEAKER_03

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 N8N. You don't have to connect it to an external tool if you don't want to. It's just easier to use it right in here. I think that's this one right here. This is that chat trigger we put in there. 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.

13:40

SPEAKER_03

Or I can just click in. Hello from AI engineer. You can just use it right inside of here. 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.

14:23

SPEAKER_03

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 wants three things by default essentially. And only one of them is required.

14:40

SPEAKER_03

We need a chat model. This is the large language model. Another really big benefit of N8N is you can connect any that you want. If it's not on this list, you can actually 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 for a big enterprise, that's how you do it. I'm going to use Open Router. Which has a really big benefit from that service, you can pick any model you want. So you can use ChatGPT 5.3 or Claude Opus 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, write in Notion that you should have open.

15:26

SPEAKER_03

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.

16:02

SPEAKER_03

And then you connect that into there. And just keep in mind that any large language model node you use, you have to use the token for that specific provider. So you can't use that Open Router token inside of something other than Open Router, for instance. Alright.

16:15

SPEAKER_03

Any questions thus far?

16:25

SPEAKER_03

We're all good. Is everybody at this point with this agent? Okay.

16:42

SPEAKER_03

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?

17:04

SPEAKER_03

It has no memory. Open Router is not being nice enough to store it for us.

17:15

SPEAKER_03

We have to store it ourself. So there's this memory tab right here. Where there's all these different options you can use.

17:26

SPEAKER_03

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? I have a question. Yep. What's up? [SPEAKER_01] What are the different standards or different types of memory you would use and for what type of applications? For sure. [SPEAKER_03] So the question was, what are the different types of memories and what are the different applications? Simple memory, we store it in N8N ourself. We handle it all for you.

17:55

SPEAKER_01

[SPEAKER_03] And inside of here, there's this context window length. [SPEAKER_03] Which means, this is five here.

18:06

SPEAKER_03

So what that means is it will only remember five messages in your context and it won't remember anything past there. 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 pretty much any application where you're doing a chat based system. You would use something like Postgres or Redis or one of these other ones if you're integrating it into an existing system.

18:34

SPEAKER_03

For instance, with Postgres, you can put it into a table and then if you have another application, you can just use Postgres with your ORM or whatever to get that messages and display it. For instance, if you had a chat UI or a dashboard you built, you could just query Postgres and put those messages on there as one example. But the biggest difference is just that this is abstracted. We do everything in N8N for you. With Postgres, 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 into the simple memory to remember it.

18:44

SPEAKER_03

And I guess this is a good point to mention expressions if you have not seen this before. Some people walked in right since. You should get on this for anyone who walked in 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 N8N you'll see these brackets and the green stuff. We call that an expression. So you can type things into fields just... into the simple memory to remember it. And I guess this is a good point to mention expressions if you have not seen this before. Some people walked in right since.

19:42

SPEAKER_03

You should get on this for anyone who walked in 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 N8N you'll see these brackets and the green stuff.

20:16

SPEAKER_03

We call that an expression.

20:22

SPEAKER_03

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 mesh. 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 convenience functions. For instance, now, it'll put the date time. It really is just anything JavaScript works here. You can say math.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.

21:10

SPEAKER_03

Great thing about this, if we're building something other than this ID, you can go in and it concatenates everything, puts it into one field. And now we have an agent that will work. You can go and chat with it.

21:33

SPEAKER_03

And you're essentially just chatting with the provider. But we want this specifically to manage our 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 were raising 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 Contacts, Gmail, you can use as a tool, which makes it this little circle node.

22:09

SPEAKER_03

And then the AI agent can just use this node at its discretion. So, for instance, we can say send a message. And then these little buttons right here let the AI fill it in automatically. And does everyone here use Gmail for their work or for their personal? Otherwise, Microsoft isn't quite as easy to set up with. But just 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 computer for a second? It will? 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 get your setup.

23:10

SPEAKER_03

I'm going to connect my Google setup, which should just be a one-click install. Okay. Okay.

23:34

Okay. Okay. Okay. Okay. Okay.

23:45

Okay. [SPEAKER_03] Okay. [SPEAKER_03] Okay. [SPEAKER_03] Okay. Okay.

24:02

[SPEAKER_03] Okay.

24:06

SPEAKER_03

Yes, it's me. Okay.

24:17

SPEAKER_03

Okay.

24:23

SPEAKER_03

Okay. Okay. Okay. Okay. Okay. Okay. Okay. [SPEAKER_03] Okay. [SPEAKER_03] Okay. Okay. [SPEAKER_03] Okay. [SPEAKER_03] Okay. [SPEAKER_03] So now you should have, oh it connected three times. [SPEAKER_03] Okay, great. [SPEAKER_03] What trips a lot of people up about N8N [SPEAKER_03] 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, [SPEAKER_03] you need to click in here and say add new credential. And we just authenticated Gmail.

25:01

SPEAKER_03

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 tools. So we're going to want this agent to be able to read our emails, search our emails, archive emails, 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.

25:35

SPEAKER_03

What you will need to know when you do that, this button right here lets the AI set it. And I guess this is important to cover because in a lot of, 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 something a tool in N8N, 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 to field. And since that's the only thing that we have, you can actually see how this is set up.

26:25

SPEAKER_03

It puts this helper expression in here. This is the only field it can do. So we 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, using this expression, and it will work.

27:02

SPEAKER_03

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, 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 put in the message that I'm going to do, 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.

27:42

SPEAKER_03

is because sometimes you wanna mix stuff together.

27:46

SPEAKER_03

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 put in the message that I'm going to do 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 can hard code 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 wanna be really 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 N8N 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 this 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 into 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 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. In here, 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. I only put my email prompts, like, oh, don't use em dashes, don't do whatever, in the actual description. Which, maybe some people would disagree with that approach. I really like it's modular. I can copy a tool from different workflows, and it will just work. I'm sure people are probably ahead of me now, from a tool perspective of adding them, 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 why do you do that? While I have this here, so that you guys don't have to sit through me writing a giant prompt, and spelling everything incorrectly, I'll just paste in the prompt I wrote last night, right here, and kind of walk through the anatomy of it a little bit, while you guys fill out those tools. And all of the different boxes in N8N, 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 two lead name to an actual prospective client, that's really embarrassing. Which we say, right here, don't use the placeholders. 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 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 this 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, when you're setting up something, set up the first one,

27:54

SPEAKER_03

That needs to be an expression. And then you'll see date, time, and it'll show this evaluates to this on this side.

28:06

SPEAKER_03

Any questions from anyone? [SPEAKER_03] 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. I'm just going to copy these. I guess I could have dragged them, but paste them here. A good tip: when you're setting up something, set up the first one, get your authentication 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. Saves a little bit of time having to click the little button every time. Thank you.

28:24

SPEAKER_03

And finally, I'm going to put this inside. When you set this here, 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.

28:42

SPEAKER_03

Something else you can do if something like, let me find a better example than thread ID, maybe, a great example. Great example is when creating an event in Google Calendar. The name of the, 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 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.

28:59

SPEAKER_03

You could do even one better than that and click this and you see the automatically generated key right here.

29:03

SPEAKER_03

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 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. Save.

29:27

SPEAKER_03

Another example of double-edged swords where you're keeping it. Okay, this one's already owned by it. On the Calendar ball.

29:35

SPEAKER_03

Alright, and now my scaling is making this a little funny, but when we ask it, we can see what's on my calendar for today, we can see exactly what tools it used. It 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 there 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 with it? Or are we still putting tools? Alright, 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 thinking, but 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: we made it so, so easy to add a lot of peace of mind here. So everything that we would consider 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.

29:36

SPEAKER_03

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 is 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 we're using. We're using the native N8N 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. And we can also add a disapprove, disallow button.

29:43

SPEAKER_03

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.

29:46

SPEAKER_03

If you press the plus button, it brings up the human review and you can just use the chat platform we're using. We're using the native N8N 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. And we can also add a disprove, 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 send a test email to... And 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, they see something red pop up and they're like, oh my gosh, if you read the error, it usually tells you what the problem is. Honestly. And a lot of painstaking work goes into the engineers write these messages themselves. Or maybe it has 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 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. 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. I think this is json dot 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. It's another demo syndrome. Okay. I'm going to deactivate this node. Send a message. 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 times. Something else you can do cool with that as well is set 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. So we can go back to testing and say, send a test email to... Alright. And now we can see here in the chat... If we can scale this up. The agent wants to call, send an email. And if you're looking at that on your phone, you're probably going to say, okay, end. 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 convenience function. By saying, money sign tool dot, and then parameters, which every field in N8N, that's called the parameter under the hood. If you ever get this object object, the people who work in JavaScript will know what that's about. But you can say dot to JSON string as a tip to see what the output is. And even just this right here 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 dot to, right? And we don't need this to JSON string anymore. From... Well not from. Subject. Tool dot... Parameters dot... Subject... Message. Tool dot... Parameters dot...

29:49

SPEAKER_03

And now we can see that 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. Right? 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... I can't open my email unfortunately.

29:52

SPEAKER_03

Dot 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 message be marked down. 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 description much more. 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 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 N8N 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. Like a lot of things in AI, that's also a double-edged sword.

29:53

SPEAKER_03

And there we go. Hope that shows how powerful 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 N8N 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. Like a lot of things in AI, that's also a double-edged sword. Because AIs will typically be wary of that.

30:14

SPEAKER_03

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, in these prompts, I'll say, okay, this won't send automatically. Don't be afraid to send a 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. So you can also, if you're really lazy like I am sometimes, you can actually put multiple tools under one human in the loop. So we could put the draft one under here as well. And then it will intercept it for both without anything having to change.

30:36

SPEAKER_03

It's just the fields are different and we made a custom message for it. So we're going to write, we're going to add a different one. But laziness still prevails. So I'm going to try something. We'll see if the demo syndrome hurts us here. And I'm going to say add human in the loop. Just like it is on send an email to the...

30:52

SPEAKER_03

And this is the N8N AI builder. Let's see, let me make sure this prompt is good. Add human in the loop, just like it is. Name the params and everything to match the tools. I found what helps a lot is 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 will actually do it faster than you're able to. And we have this on 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 where you can hook it up to Cloud Code or whatever agent you have.

31:12

SPEAKER_03

And it can do the same functions that this has just through the CLI with the MCP.

31:16

SPEAKER_03

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 ChatHub because it's a little nicer to see here. Add a calendar, invite for order calendar for lunch today at noon. And the email. Oh my gosh. I don't know my own email. Asking if he wants to go. Send. It 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.

32:01

SPEAKER_03

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. So you know you won't do anything by accident. 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. It marks the test ones with the flask. But we'll see 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. And if you click copy to editor, we can now work with this data in here.

32:18

SPEAKER_03

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. And I think I can do ddd t cannot convert.

32:31

SPEAKER_03

Oh, why not? Let's see. Oh my god, I tried to convert lunch to a date time. We can't blame the demo luck for that one. Okay, and then see now it knows that this is compatible. So when you press the dot, to date time just already comes up. If we press the dot again, format already comes up. And the very nice engineers at N8N 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.

32:55

SPEAKER_03

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 is very helpful. But if we'll format this and say capital D, I think, yeah, there we go.

33:07

SPEAKER_03

Nice. If you add a couple more Ds, it just becomes even nicer. D, D, D, D, and then T, T. And this is, if you're wondering what this is, this is just the Luxon date functions. It's just the date library we use. Is what this D, D, T.

33:28

SPEAKER_03

I just have written it enough times to remember. But you can just ask Claude to format it for N8N and it'll do it.

33:39

SPEAKER_03

So now that looks much better. That's much easier for us to approve without having to read a UTC timestamp. So we'll publish it again and say, put dinner on the cal for seven. 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.

34:09

[SPEAKER_03] Only a month?

34:31

[SPEAKER_03] Only a month per year.

34:56

[SPEAKER_03] Oh, really?

35:51

SPEAKER_03

Hmm. Only a month. That's much easier for us to approve without having to read a UTC timestamp. So we'll publish it again and say, put dinner on the cal for seven. 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 per year. Oh, really? Hmm. Only a month. Are you on Cloud Pro when you select it? Yeah, when I select it. I can only select for a month, not a year.

36:56

SPEAKER_03

But I select a 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 create coupons. Yeah, yeah. So I'll put it up. I'll leave it up for 24 hours.

37:22

SPEAKER_03

And then I'll remove it. Sorry about that. How many more? Fun thing, I actually made an entire discount system. Our coupon generator at N8N is created entirely in N8N and it abstracts all of the different coupon systems we have across merch, enterprise, giveaway stuff, cloud. It all has a single entry point with a REST API that goes through N8N and it has all the audit logs and all that. It's really interesting. And I built the entire system in six hours.

38:02

SPEAKER_03

So it's really, really powerful stuff. Yep.

38:14

SPEAKER_03

Yeah.

38:21

SPEAKER_03

Did you mention something about... Oh, did you mind waiting for the mic? Thank you. You mentioned MCP server because until late there was an unofficial one on GitHub that I've actually been using so far and it's been working great with Cloud Code. 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 this is really, really exciting. 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 let's see what we have here.

38:55

[SPEAKER_03] Workflows that are published or have a webhook form schedule or a chat trigger.

38:59

SPEAKER_03

So that should be ours. Email and calendar bot, enable. You have to give access per workflow, which you can do up here as well.

39:14

SPEAKER_03

Let's say settings available in MCP.

39:39

SPEAKER_03

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 thing, you can say connected clients or how do you... Connection details. You just put in your server URL in OAuth.

40:29

SPEAKER_03

So in... Let's see, in Cloud. I'm almost afraid to open my Cloud. But we are an official connector in Cloud. So you can just say connect N8N. You put that URL in. It'll connect with OAuth. You just press login. Or if you are doing access token, you can copy that here. And you 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.

41:40

SPEAKER_03

We built it right in. So it does all the same stuff. I would say you can try both out and see. But ours is going to be adding more and more over time. Did 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.

42:31

SPEAKER_03

It's actually also able to execute. So you could say to Claude, run my email and calendar bot. And it will send a chat message to it. And it's able to interact with it. [SPEAKER_05] So that's something else I don't think Roman's MCP can do. Yeah, 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. [SPEAKER_05] Yep.

43:41

SPEAKER_03

[SPEAKER_05] Oh, yes. Sorry. Thank you. So assuming I want to build a company-wide workflow, right? And I want to have specific human in the loop for specific departments, specific actions. [SPEAKER_05] If that makes sense. [SPEAKER_05] Is there a way that I can log and see where the whole workflow delays? [SPEAKER_05] So a heat map of logs of who takes longer to respond, like that.

44:51

SPEAKER_03

Hmm.

45:18

SPEAKER_03

Who takes longer to respond?

45:38

SPEAKER_03

That's an interesting use case. I was going to say we have lots of audit logging functionalities in our enterprise plans. But that wouldn't be something baked in. But it's something you can make with N8N. Because what happens with this, 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.

46:50

SPEAKER_03

Okay.

46:55

SPEAKER_03

So now what happens is this workflow goes into a waiting state. And you can see it here. And then once it resumes, it shows finished. You can use an N8N node. [SPEAKER_04] To get the execution. [SPEAKER_04] And it will show when it started waiting, when it stopped waiting. [SPEAKER_04] 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. [SPEAKER_04] So it's something you can make separately in N8N. [SPEAKER_04] Aggregate the data together. [SPEAKER_04] That's an interesting use case. [SPEAKER_04] I'll write that. [SPEAKER_04] I'll think about that.

48:09

SPEAKER_03

Because audit logging human in the loop is something that we should definitely really get polished. Let's see, time check. We're at 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?

48:25

SPEAKER_03

So it would just be a matter of parsing that data. [SPEAKER_04] So it's something you can make separately in N8N. [SPEAKER_04] Aggregate the data together.

48:32

SPEAKER_03

[SPEAKER_04] That's an interesting use case. [SPEAKER_04] I will write that. [SPEAKER_04] I'll think about that. Because audit logging human in the loop is something that we should definitely really get polished.

48:45

SPEAKER_03

Let's see, time check. We're at 1150. I want to show you guys one more thing specifically to set you guys up. And that is converting this to Slack. Right? So if we take, did anyone have any other questions? Before we do that? Okay.

49:03

SPEAKER_03

So I'll just add Slack here. Does everyone here use Slack? Or Microsoft Teams?

49:12

SPEAKER_03

Hopefully no one uses Teams. Slack, yeah. I figured it would be mostly Slack. So my personal agent I use for myself, I use Slack. 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 something dancing. And then at the end, after it responds, it takes the thing away.

49:47

SPEAKER_03

So it even has a loading indicator. It's really nice. So 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.

50:08

SPEAKER_03

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.

50:23

SPEAKER_03

What I use this for, if there's a GitHub issue or a PR or something, I have it come in. I have it go through, scan the code, do whatever, and send off messages to people asking them to get some details that I know I'll have when I read through it. And then I just have the message come to me because I don't want to AI message coworkers or clients or anything without seeing it first.

50:36

SPEAKER_03

Does that make sense? Yeah. All of that is actually in this Notion document as the next steps here. In the next step, you can give it memory. So it can persist memory through a... Sorry, you can hardly see that. [SPEAKER_02] But if you're in the Notion document, you can see. [SPEAKER_02] You can give it persistent memory. [SPEAKER_02] It will remember across sessions. [SPEAKER_02] I give you everything you need to set that up. [SPEAKER_02] 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.

51:21

SPEAKER_03

And that's all in here for you to experiment with and expand this past, which hopefully I've set you up decently to be able to do that. We have 10 minutes left. And instead of starting the next thing, I would just like to answer anyone's questions or just chat about what's coming next for N8N, what you want it to be, anything like that. So, any questions? I would be happy to take you. I want to ask about the human-in-the-loop executions. My case is a self-hosted instance in which we have a limit on concurrent executions.

51:52

SPEAKER_03

So, I was asking whether the waiting executions count as running executions because, for instance, if you have a 10 limit on concurrent executions, you may become stuck because maybe 10 users just don't respond.

52:00

SPEAKER_03

Yeah. I don't know the answer to that. I don't think it does, but it might. I'll give you something you can do 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 that just happens sometimes.

52:56

SPEAKER_03

And then it's not, okay, we're inevitably going to hit a point where we have this run out. So, you can set a time limit. Do you know the answer to that? I don't know. Yeah. So, we can follow up with you for sure. I can find out after the session.

53:30

SPEAKER_03

Thanks. Any other questions? Hang on. Hey. Yeah. So, in a team setup where you have multiple people potentially working on the same work plan, what's the approval process? Do you have something similar to 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? No. Oh, if you have Teams. [SPEAKER_03] No, but.

54:12

[SPEAKER_03] Inside of a team. [SPEAKER_03] Yeah.

54:27

SPEAKER_03

[SPEAKER_03] 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 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?

54:34

SPEAKER_03

So, then that Slack message, you can just change the to field to whoever that decision-maker is or whatever channel that is, and then they can press approve or deny.

54:48

SPEAKER_03

Is that what you were asking? Not really. Oh, sorry. What was the... But it's a good additional thing. No, my question was more around managing workflows in general. You have a project, you have someone who initially sets it up, and then you invite some other people onto your team plan who also are supposed to help out maybe adding some nodes, tweaking, maybe you're on vacation and so on. So, then that Slack message, you can just change the to field to whoever that decision-maker is or whatever channel that is, and then they can press approve or deny. Is that what you were asking?

55:05

SPEAKER_03

[SPEAKER_03] Not really. Oh, sorry. What was the...

55:20

SPEAKER_03

But it's a good additional thing. No, my question was more around managing workflows in general. You have a project, you have someone who initially sets it up, and then you invite some other people onto your team plan 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 N8N 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.

55:41

SPEAKER_03

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 make a copy of it, and then whoever's in charge of managing it will replace it with 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. But in terms of multiple people using, do you mean multiple people using the same workflow, or editing it? More editing, yeah.

56:12

SPEAKER_03

Yeah, that's something that can be tricky with branches, like if you wanted to 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 use enterprise, and use the git integrations.

56:28

SPEAKER_03

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 on the workflow, where you can work on the workflow with another person live, but a lot of updates in the background, now that we have autosave.

56:32

SPEAKER_03

So if you're working on a workflow with another person remotely, you can see each other's, moving stuff around, and stuff like that.

56:37

SPEAKER_03

Okay, thanks. Yep. All right. Last couple questions, if anyone has anything. [SPEAKER_00] Yep. [SPEAKER_00] What about human in the loop, for cases in which you have no UI, because I saw that it shows two buttons, accept and decline, but if you, I guess, that if you just respond accept to the LLM, he cannot just execute the tool. [SPEAKER_00] Exactly. [SPEAKER_00] So, in cases like a phone call, which provides, has no buttons to click, you expect the agent to ask for a confirmation, for instance, on a phone call with an agent that books appointments for you, and maybe he just asks for a confirmation before doing that.

57:05

SPEAKER_03

So can it handle such situation in which the prompt should suggest which button to click? So, I'm not sure if we'll ever have the, because that would require the LLM deciding if it's approved or denied, which the entire purpose of this is human review. It cannot get passed otherwise. So that's a brick wall. So that's a brick wall. Nothing getting past it, right?

57:29

SPEAKER_03

That being said, right now it's only chat platforms.

57:37

SPEAKER_03

I would like us to also have the ability to say custom, and it gives you back webhooks, because under the hood, what it's doing is it's just making an endpoint that then those chat platforms send API requests to. So, 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.

57:49

SPEAKER_03

So, hopefully that will come eventually. But, for your specific use case, what I would say is you can use a sub-workflow and do that logic manually. So, you can make a sub-workflow and you can have the action where it goes in and actually, you know, asks the question. [SPEAKER_07] 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-workflow.

58:27

SPEAKER_03

And you can just name it confirm. [SPEAKER_00] And then it can respond true or false or whatever it needs to do. So, you could do that, abstract away that into a tool. [SPEAKER_06] It would just be workflow design instead of the human review step. [SPEAKER_06] Does that make sense? [SPEAKER_06] Great.

58:41

SPEAKER_03

[SPEAKER_06] Thanks.

58:48

SPEAKER_03

[SPEAKER_06] All right. [SPEAKER_06] One last question. [SPEAKER_06] Let's say you design a workflow and you want to use it as an API and call it from someplace else. Like in my company, we have variable to deploy Microsoft stuff.

58:57

SPEAKER_03

The rest is complicated. But use it as an engine and then just call it and hide. [SPEAKER_06] Is that possible? Absolutely. [SPEAKER_06] I make full rest APIs in N8N all the time. And I make the fancy swagger docs and everything. 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 it into their N8N workflows and into the external tools.

59:15

SPEAKER_03

And I made all of that and then just gave them rest API docs. And it's all inside of N8N and everything's managed inside of there, including all the human in the loop and everything. So, I hope that answers your question. Absolutely. You would just make a webhook trigger. [SPEAKER_06] And then you get a path right here. And you could do restful names too. So you could do user and then post to create a user, for instance, if that makes sense. [SPEAKER_06] All right. [SPEAKER_06] And I think that's pretty much all the time we have. [SPEAKER_06] I hope that this was helpful and showed you new things and that you learned stuff.

59:51

SPEAKER_03

[SPEAKER_06] 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. [SPEAKER_06] One thing I would say, if you were going to add a bunch more tools to this, use the sub-agent tool. [SPEAKER_06] Agent. [SPEAKER_06] 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, God forbid, Jira management agent. And the list goes on.

1:00:12

SPEAKER_03

That way you're not adding so much context to just the main agent. And you can change the model between each one. [SPEAKER_06] One thing I would say, if you were going to add a bunch more tools to this, use the sub-agent tool. [SPEAKER_06] Agent. [SPEAKER_06] 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, God forbid, Jira management agent. And the list goes on. That way you're not adding so much context to just the main agent.

1:00:56

SPEAKER_03

And you can change the model between each one. Each one can have a different LLM optimized for its different thing. [SPEAKER_06] 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. And don't forget to go and use your coupons. Don't forget to update the device. Yeah. I've been pressing defer on this for the last month straight. And I'm thinking it's going to force an update during the thing. [SPEAKER_06] So it came up at exactly 12. [SPEAKER_06] So that's the session. Thank you guys so much. Thank you. Thank you. [SPEAKER_00] Thank you.

1:01:43

SPEAKER_03

[SPEAKER_00] Thank you. [SPEAKER_00] Thank you. [SPEAKER_00] Thank you. We built it right in. So it does all the same stuff. I would say you can try both out and see. But ours is going to be adding more and more over time.

1:02:19

SPEAKER_03

Did 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 Claude, run my email and calendar bot. And it will send a chat message to it. And it's able to interact with it.

1:02:39

SPEAKER_05

So that's something else I don't think Roman's MCP can do.

1:02:44

SPEAKER_03

Yeah, 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.

1:02:51

SPEAKER_05

Yep.

1:02:55

SPEAKER_05

Oh, yes.

1:02:56

SPEAKER_03

Sorry. Thank you.

1:03:00

SPEAKER_03

So assuming I want to build a company-wide workflow, right? And I want to have specific human in the loop for specific departments, specific actions,

1:03:09

SPEAKER_05

if that makes sense. Is there a way that I can log and see where the whole workflow delays? So like a heat map of logs of who takes longer to respond, like that.

1:03:27

SPEAKER_03

Hmm. Who takes longer to respond? That's an interesting use case. 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 any then. Because what happens with this, 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. Okay. So now what happens is this workflow, oh 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.

1:04:21

SPEAKER_03

You can use a N8N node.

1:04:29

SPEAKER_03

To get the execution.

1:04:31

SPEAKER_04

And it will show when it started waiting, when it stopped waiting. And then if you have your Slack connections and everything, it'll show all those details.

1:04:39

SPEAKER_03

So it would just be a matter of parsing that data.

1:04:41

SPEAKER_04

So it's something you can make separately in N8N. Aggregate the data together. That's an interesting use case. I would, I'll write that. I'll, I'll think about that.

1:04:51

SPEAKER_03

Because audit logging human in the loop is something that we should definitely really get polished. Let's see, time check. We're at 1150. I want to show you guys one more thing specifically to set you guys up. And that is converting this to Slack. Right? So if we take, did anyone have any other questions? Before we do that? Okay. So I'll just add Slack here. Does everyone here use Slack? 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, I use Slack. 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 something

1:05:40

SPEAKER_03

dancing. And then at the end, after it responds, it takes the thing away. So it even has like a loading indicator. It's really nice. So 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.

1:06:36

SPEAKER_03

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 have it go through, scan the code, do whatever, and send off messages to people asking them to get some details that I know I'll have when I read through it. And then I just have the message come to me because I don't want to AI message coworkers or clients or anything without seeing it first.

1:07:17

SPEAKER_03

Does that make sense? Yeah. All of that is actually in this Notion document as the next steps here. In the next step, you can give it memory. So it can persist memory through a... Sorry, you can hardly see that.

1:07:35

SPEAKER_02

But if you're in the Notion document, you can see. You can give it persistent memory. It will remember across sessions. 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

1:07:51

SPEAKER_03

that through Slack, but it also runs hourly and has everything set up. And that's all in here for you to experiment with and expand this past, which hopefully I've set you up decently to be able to do that. We have 10 minutes left. And instead of starting the next thing, I would just like to answer anyone's questions or just chat about what's coming next for N8N, what you want it to be, anything like that. So, any questions? I would be happy to take you.

1:08:28

SPEAKER_03

I want to ask about the human-in-the-loop executions. My case is a self-hosted instance in which we have a limit on concurrent executions. So, I was asking whether the waiting executions count as running executions because, for instance, if you have a 10 limit on concurrent executions, you may become stuck because maybe 10 users 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 you can do 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.

1:09:35

SPEAKER_03

If someone just misses it, I know that just happens sometimes. And then it's not like, okay, we're inevitably going to hit a point where we have this run out. So, you can set a time limit. Do you know the answer to that? I don't know. Yeah. So, we can follow up with you for sure. I can find out after the session. Thanks.

1:09:59

SPEAKER_03

Any other questions?

1:10:06

SPEAKER_03

Hang on.

1:10:10

SPEAKER_03

Hey. Yeah. So, in a team setup where you have multiple people potentially working on the same work plan, so what's the approval process? 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? No. Oh, if you have Teams. No, but like... 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

1:10:46

SPEAKER_03

the one that 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 to field to whoever that decision-maker is or whatever channel that is, and then they can press approve or deny. Is that what you were asking? Not really. Oh, sorry. What was the... But it's a good additional thing. No, my question was more around like managing workflows in general. You have a project, you have someone who initially sets it up, and then you invite some other people

1:11:22

SPEAKER_03

onto your team plan 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 N8N 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. 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 changes.

1:12:07

SPEAKER_03

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.

1:12:23

SPEAKER_03

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 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, 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 on the workflow, where you can work on the workflow with another person live,

1:13:04

SPEAKER_03

but a lot of 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. Okay, thanks. Yep. All right. Last couple questions, if anyone has anything.

1:13:22

SPEAKER_00

Yep.

1:13:28

SPEAKER_00

What about human in the loop, for cases in which you have no UI, because I saw that 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, in cases like a phone call, which provides, has no buttons to click, you expect the agent to ask for a confirmation, for instance, on a phone call with an agent that books appointments for you, and maybe he just asks for a confirmation,

1:14:26

SPEAKER_03

before doing that. So, can it handle such situation in which the prompt should suggest which button to click? So, I'm not sure if we'll ever have 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 brick wall. So, that's a brick wall. DMZ. Nothing getting past it, right? That being said, right now it's only chat platforms. I would like us to also have the ability to say, custom, and it gives you back webhooks, because under the hood, what it's doing is it's just making an endpoint that then those chat platforms send API requests to.

1:15:20

SPEAKER_03

So, 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 sub-workflow and do that logic manually. So, you can make a sub-workflow and you can have the action where it goes in and actually, you know, asks the question.

1:15:45

SPEAKER_07

You get it back and then you just do an if node.

1:15:47

SPEAKER_03

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-workflow. And you can just name it, confirm.

1:15:57

SPEAKER_00

And then it can respond true or false or whatever it needs to do.

1:16:00

SPEAKER_03

So, you could do that, like abstract away that into a tool.

1:16:04

SPEAKER_06

It would just be workflow design instead of the unit review step. Does that make sense? Great. Thanks. All right. One last question.

1:16:14

SPEAKER_06

Let's say you design a workflow and you want to use it as an API and call it from someplace else.

1:16:23

SPEAKER_03

Like in my company, we have variable to deploy Microsoft stuff. The rest is complicated. But use it as an engine and then just call it and hide. Is that possible? Absolutely.

1:16:36

SPEAKER_06

I make full rest APIs and NN all the time.

1:16:40

SPEAKER_03

And I make, you know, the fancy like swagger docs and everything. 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 it into their NN 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 NN and everything's managed inside of there, including all the human in the loop and everything. So, I hope that answers your question. Absolutely. You would just make a webhook trigger like this.

1:17:15

SPEAKER_06

And then you get a path right here.

1:17:17

SPEAKER_03

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.

1:17:31

SPEAKER_06

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. One thing I would say, if you were gonna add a bunch more tools to this, use the sub-agent tool. Agent. And then you can have one agent that calls other specialized agents.

1:18:03

SPEAKER_03

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, God forbid, Jira management 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.

1:18:33

SPEAKER_06

Hope that makes sense.

1:18:35

SPEAKER_03

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. And don't forget to go and use your coupons. Don't forget to update the device. Yeah. I was, I've been pressing defer on this for like the last month straight. And I'm like, it's gonna force an update during the thing.

1:18:57

SPEAKER_06

So it came up at exactly 12. So that's the session.

1:19:01

SPEAKER_03

Thank you guys so much. Thank you. Thank you.

1:19:11

SPEAKER_00

Thank you. Thank you. Thank you. Thank you.

Reading tools

Type to find a passage

Appearance
Ask this transcript

Add a note