Панель сбора материалов10.09.2026
← К материалу

SOURCE DOCUMENT

Raw HTML

Long-running agents beyond prompt engineering · n8n Blog

Оригинал ↗
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="utf-8">
		<meta http-equiv="X-UA-Compatible" content="IE=edge">
			<title>Long-running agents beyond prompt engineering – n8n Blog</title>
		<meta name="HandheldFriendly" content="True">
		<meta name="viewport" content="width=device-width, initial-scale=1">
		<!-- <link rel="preconnect" href="https://fonts.googleapis.com"> 
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="preload" as="style" href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,400;0,800;0,900;1,400;1,800;1,900&display=swap">
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Nunito:ital,wght@0,400;0,800;0,900;1,400;1,800;1,900&display=swap"> -->
		<link rel="stylesheet" type="text/css" href="https://blog.n8n.io/assets/css/screen.css?v=M18h2_Kr5nq7cywd">
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/fontawesome.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
		<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/solid.min.css" crossorigin="anonymous" referrerpolicy="no-referrer">
		
		<script src="https://blog.n8n.io/assets/js/slugify.js?v=pgb4I6LvVtEl3iCf"></script>
		<script src="https://blog.n8n.io/assets/js/workflow-banner.js?v=tSVISzLW2Ja5gfUV"></script>
		<script src="https://blog.n8n.io/assets/js/popular-tags.js?v=X0tYuT5LRchLCeSS"></script>
		
		<!-- Google Tag Manager (blog.n8n.io) -->
		<script>(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
		new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
		j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
		'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
		})(window,document,'script','dataLayer','GTM-MQTZKBJ');</script>
		<!-- End Google Tag Manager (blog.n8n.io) -->
		<link rel="icon" href="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w256h256/2022/06/logo-n8n-symbol-512x512.png" type="image/png">
    <link rel="canonical" href="https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/">
    <meta name="referrer" content="no-referrer-when-downgrade">
    
    <meta property="og:site_name" content="n8n Blog">
    <meta property="og:type" content="article">
    <meta property="og:title" content="Long-running agents beyond prompt engineering">
    <meta property="og:description" content="Y&#x27;all relying too much on prompting your way through agent design. Call it context engineering or god damn loop engineering, you still ask the LLM to make sure it only generates factual information and that it reviews information itself.

The more you use an LLM to evaluate itself or">
    <meta property="og:url" content="https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/">
    <meta property="og:image" content="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/08/long-running-agents-header.jpg">
    <meta property="article:published_time" content="2026-08-31T14:01:21.000Z">
    <meta property="article:modified_time" content="2026-08-31T14:01:21.000Z">
    <meta property="article:tag" content="AI">
    
    <meta property="article:publisher" content="https://www.facebook.com/n8nio">
    <meta name="twitter:card" content="summary_large_image">
    <meta name="twitter:title" content="Long-running agents beyond prompt engineering">
    <meta name="twitter:description" content="Y&#x27;all relying too much on prompting your way through agent design. Call it context engineering or god damn loop engineering, you still ask the LLM to make sure it only generates factual information and that it reviews information itself.

The more you use an LLM to evaluate itself or">
    <meta name="twitter:url" content="https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/">
    <meta name="twitter:image" content="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/08/long-running-agents-header.jpg">
    <meta name="twitter:label1" content="Written by">
    <meta name="twitter:data1" content="Andrew Green">
    <meta name="twitter:label2" content="Filed under">
    <meta name="twitter:data2" content="AI">
    <meta name="twitter:site" content="@n8n_io">
    <meta property="og:image:width" content="1200">
    <meta property="og:image:height" content="675">
    
    <script type="application/ld+json">
{
    "@context": "https://schema.org",
    "@type": "Article",
    "publisher": {
        "@type": "Organization",
        "name": "n8n Blog",
        "url": "https://blog.n8n.io/",
        "logo": {
            "@type": "ImageObject",
            "url": "https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2025/09/n8n-Logo.svg",
            "width": 145,
            "height": 26
        }
    },
    "author": {
        "@type": "Person",
        "name": "Andrew Green",
        "image": {
            "@type": "ImageObject",
            "url": "https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2025/02/Andrew-Green--1-.jpg",
            "width": 1200,
            "height": 1233
        },
        "url": "https://blog.n8n.io/author/andrew-green/",
        "sameAs": [
            "https://www.linkedin.com/in/andrew-green-tech/"
        ]
    },
    "headline": "Long-running agents beyond prompt engineering",
    "url": "https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/",
    "datePublished": "2026-08-31T14:01:21.000Z",
    "dateModified": "2026-08-31T14:01:21.000Z",
    "image": {
        "@type": "ImageObject",
        "url": "https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/08/long-running-agents-header.jpg",
        "width": 1200,
        "height": 675
    },
    "keywords": "AI",
    "description": "Y'all relying too much on prompting your way through agent design. Call it context engineering or god damn loop engineering, you still ask the LLM to make sure it only generates factual information and that it reviews information itself.\n\nThe more you use an LLM to evaluate itself or perform analysis, the more points of hallucination and drift you introduce.\n\nWhen you use text generators to automate the stuff you don’t want to do, you still need to treat it as any other piece of software, and de",
    "mainEntityOfPage": "https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/"
}
    </script>

    <meta name="generator" content="Ghost 6.63">
    <link rel="alternate" type="application/rss+xml" title="n8n Blog" href="https://blog.n8n.io/rss/">
    <script defer src="https://cdn.jsdelivr.net/ghost/portal@~2.71/umd/portal.min.js" data-i18n="true" data-ghost="https://blog.n8n.io/" data-key="8626993d9b363277120ea42164" data-api="https://n8n-cloud-blog.ghost.io/ghost/api/content/" data-locale="en" crossorigin="anonymous"></script><style id="gh-members-styles">.gh-post-upgrade-cta-content,
.gh-post-upgrade-cta {
    display: flex;
    flex-direction: column;
    align-items: center;
    font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif;
    text-align: center;
    width: 100%;
    color: #ffffff;
    font-size: 16px;
}

.gh-post-upgrade-cta-content {
    border-radius: 8px;
    padding: 40px 4vw;
}

.gh-post-upgrade-cta h2 {
    color: #ffffff;
    font-size: 28px;
    letter-spacing: -0.2px;
    margin: 0;
    padding: 0;
}

.gh-post-upgrade-cta p {
    margin: 20px 0 0;
    padding: 0;
}

.gh-post-upgrade-cta small {
    font-size: 16px;
    letter-spacing: -0.2px;
}

.gh-post-upgrade-cta a {
    color: #ffffff;
    cursor: pointer;
    font-weight: 500;
    box-shadow: none;
    text-decoration: underline;
}

.gh-post-upgrade-cta a:hover {
    color: #ffffff;
    opacity: 0.8;
    box-shadow: none;
    text-decoration: underline;
}

.gh-post-upgrade-cta a.gh-btn {
    display: block;
    background: #ffffff;
    text-decoration: none;
    margin: 28px 0 0;
    padding: 8px 18px;
    border-radius: 4px;
    font-size: 16px;
    font-weight: 600;
}

.gh-post-upgrade-cta a.gh-btn:hover {
    opacity: 0.92;
}</style>
    <script defer src="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/sodo-search.min.js" data-key="8626993d9b363277120ea42164" data-styles="https://cdn.jsdelivr.net/ghost/sodo-search@~1.8/umd/main.css" data-sodo-search="https://n8n-cloud-blog.ghost.io/" data-locale="en" crossorigin="anonymous"></script>
    
    <link href="https://blog.n8n.io/webmentions/receive/" rel="webmention">
    <script defer src="/public/cards.min.js?v=H-xYiMJpfVIWffjV"></script>
    <link rel="stylesheet" type="text/css" href="/public/cards.min.css?v=yumsKhOGY54VXmGs">
    <script defer src="/public/ghost-stats.min.js?v=vFcCUf6ZQ0Hyhc8h" data-stringify-payload="false" data-datasource="analytics_events" data-storage="localStorage" data-host="https://blog.n8n.io/.ghost/analytics/api/v1/page_hit"  tb_site_uuid="0d78b34c-0c5f-4975-900e-61d00ccb1c2d" tb_post_uuid="d719faac-6bf9-4c49-b605-03319b0c950a" tb_post_type="post" tb_member_uuid="undefined" tb_member_status="undefined" tb_gift_link=""></script><style>:root {--ghost-accent-color: #FD8925;}</style>
	</head>
	<body class="post-template tag-ai">
		
		<!-- Google Tag Manager (noscript) -->
		<noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-MQTZKBJ"
		height="0" width="0" style="display:none;visibility:hidden"></iframe></noscript>
		<!-- End Google Tag Manager (noscript) -->
		<div class="global-wrap">
			<div class="global-content">
				<div class="hero-background-decoration"></div>
				<header class="header-section">
	<div class="header-container">
		<div class="header-navbar">
			<!-- Left Section: Logo + Navigation -->
			<div class="header-left">
				<div class="header-logo">
					<a href="https://blog.n8n.io" class="logo-link">
						<img src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2025/09/n8n-Logo.svg" alt="n8n Blog" class="logo-image">
					</a>
				</div>
				<nav class="header-navigation">
					<ul class="nav-list">
						<li class="nav-item"><a href="https://n8n.io/" class="nav-link">n8n home</a></li>
						<li class="nav-item"><a href="/tag/tutorial/" class="nav-link">Tutorials</a></li>
						<li class="nav-item"><a href="/tag/guide/" class="nav-link">Guides</a></li>
						<li class="nav-item"><a href="/tag/tips/" class="nav-link">Tips</a></li>
						<li class="nav-item"><a href="/tag/by-partners/" class="nav-link">By partners</a></li>
						<li class="nav-item"><a href="/tag/news/" class="nav-link">News</a></li>
                        <li class="nav-item"><a href="/tag/interview/" class="nav-link">Interviews</a></li>
                    </ul>
				</nav>
			</div>
			
			<!-- Right Section: GitHub Badge + Sign In + Get Started -->
			<div class="header-right">
				<a href="https://github.com/n8n-io/n8n" class="github-badge" target="_blank" rel="noopener noreferrer">
					<div class="github-icon">
						<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
							<path fill-rule="evenodd" clip-rule="evenodd" d="M12 0C5.37 0 0 5.37 0 12C0 17.31 3.435 21.795 8.205 23.385C8.805 23.49 9.03 23.13 9.03 22.815C9.03 22.53 9.015 21.585 9.015 20.58C6 21.135 5.22 19.845 4.98 19.17C4.845 18.825 4.26 17.76 3.75 17.475C3.33 17.25 2.73 16.695 3.735 16.68C4.68 16.665 5.355 17.55 5.58 17.91C6.66 19.725 8.385 19.215 9.075 18.9C9.18 18.12 9.495 17.595 9.84 17.295C7.17 16.995 4.38 15.96 4.38 11.37C4.38 10.065 4.845 8.985 5.61 8.145C5.49 7.845 5.07 6.615 5.73 4.965C5.73 4.965 6.735 4.65 9.03 6.195C9.99 5.925 11.01 5.79 12.03 5.79C13.05 5.79 14.07 5.925 15.03 6.195C17.325 4.635 18.33 4.965 18.33 4.965C18.99 6.615 18.57 7.845 18.45 8.145C19.215 8.985 19.68 10.05 19.68 11.37C19.68 15.975 16.875 16.995 14.205 17.295C14.64 17.67 15.015 18.39 15.015 19.515C15.015 21.12 15 22.41 15 22.815C15 23.13 15.225 23.505 15.825 23.385C18.2072 22.5807 20.2772 21.0497 21.7437 19.0074C23.2101 16.965 23.9993 14.5143 24 12C24 5.37 18.63 0 12 0Z" fill="currentColor"/>
						</svg>
					</div>
					<span class="github-text">Github ★ 162k</span>
				</a>
				<a href="https://app.n8n.cloud/" class="sign-in-link">Sign in</a>
				<a href="https://app.n8n.cloud/register" class="get-started-btn">Get Started</a>
			</div>

			<!-- Mobile Menu Toggle -->
			<div class="mobile-menu-toggle">
				<input id="mobile-toggle" class="mobile-checkbox" type="checkbox">
				<label class="mobile-toggle-label" for="mobile-toggle">
					<span class="hamburger">
						<span class="bar"></span>
						<span class="bar"></span>
						<span class="bar"></span>
					</span>
				</label>
				<!-- Mobile Navigation Menu -->
				<nav class="mobile-navigation">
					<ul class="mobile-nav-list">
						<li class="mobile-nav-item"><a href="https://n8n.io/" class="mobile-nav-link">n8n home</a></li>
						<li class="mobile-nav-item"><a href="/tag/tutorial/" class="mobile-nav-link">Tutorials</a></li>
						<li class="mobile-nav-item"><a href="/tag/guide/" class="mobile-nav-link">Guides</a></li>
						<li class="mobile-nav-item"><a href="/tag/tips/" class="mobile-nav-link">Tips</a></li>
                        <li class="mobile-nav-item"><a href="/tag/by-partners/" class="mobile-nav-link">By partners</a></li>
                        <li class="mobile-nav-item"><a href="/tag/news/" class="mobile-nav-link">News</a></li>
                        <li class="mobile-nav-item"><a href="/tag/interview/" class="mobile-nav-link">Interviews</a></li>
						<li class="mobile-nav-item mobile-auth">
							<a href="https://app.n8n.cloud/" class="mobile-nav-link">Sign in</a>
							<a href="https://app.n8n.cloud/register" class="mobile-get-started-btn">Get Started</a>
						</li>
					</ul>
				</nav>
			</div>
		</div>
	</div>
</header>				<main class="global-main">
					<progress class="post-progress"></progress>

<!-- Hero Section for Blog Post -->
<div class="post-hero-section">
	<div class="post-hero-container">
		<div class="post-hero-content">
			<div class="post-hero-tags">
				<a href="/tag/ai/" class="post-hero-chip">AI</a>
			</div>
			<div class="post-hero-copy">
				<div class="post-hero-header">
					<h1 class="post-hero-title">Long-running agents beyond prompt engineering</h1>
				</div>
			</div>
			<div class="post-hero-authors">
				<div class="post-hero-avatars">
					<div class="post-hero-avatar" style="background-image: url(https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2025/02/Andrew-Green--1-.jpg)">
					</div>
				</div>
				<div class="post-hero-author-info">
					<div class="post-hero-author-name">
						<a href="/author/andrew-green/">Andrew Green</a>
					</div>
					<div class="post-hero-author-meta">
						<time datetime="2026-08-31">August 31, 2026</time> ∙ 11 minutes read
					</div>
				</div>
			</div>
		</div>
		<div class="post-hero-node-box">
			<div class="post-hero-image-wrapper">
				<img class="post-hero-image"
					srcset="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w400/2026/08/long-running-agents-header.jpg 400w,
							https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/08/long-running-agents-header.jpg 600w,
							https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w800/2026/08/long-running-agents-header.jpg 1000w,
							https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/08/long-running-agents-header.jpg 1600w"
					sizes="(max-width: 480px) 400px,
						   (max-width: 768px) 600px,
						   (max-width: 1024px) 800px,
						   544px"
					src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w800/2026/08/long-running-agents-header.jpg"
					alt="Long-running agents beyond prompt engineering"
					loading="eager">
			</div>
		</div>
	</div>
</div>

<!-- Post Content -->
<article class="post-article">
	<div class="post-content-wrapper">
		<div id="toc"></div>
		<div class="post-content">
		<p>Y'all relying too much on prompting your way through agent design. Call it context engineering or god damn loop engineering, you still ask the LLM to make sure it only generates factual information and that it reviews information itself.</p><p>The more you use an LLM to evaluate itself or perform analysis, the more points of hallucination and drift you introduce.</p><p>When you use text generators to automate the stuff you don’t want to do, you still need to treat it as any other piece of software, and design its operating logic.</p><p>Before talking about long running agents, remind yourself of the following:</p><ul><li>It’s fine to use short-running agents. Use the simplest tool for the job.</li><li>Differentiate between models and agents. A model takes a text input and generates a text output, but it does not do anything else. The agent is the execution part. Agents rely on models, for example a model hitting its token limit mid-JSON-object is a model-level event (truncated output) with an agent-level consequence (malformed tool call, broken state write, corrupted ledger entry).</li></ul><p>This series is about the harness. An LLM call can be <em>used</em> as a tool (e.g., summarize these 40 tool results into 200 words) but it should be part of a deterministic function call the harness decides to make, on its own schedule, with its own validation of the output. It is not the agent deciding, mid-task "oh man, I should really compress my context now."</p><h2 id="part-1-context-and-memory">Part 1: Context and Memory</h2><p>Every prompt you send to an LLM resends the full conversation history. The chat-like experience is a UI. A user illusion™. This means that in longer conversations, you can max out the context window and the model starts truncating it, and/or you experience context rot and drift where the model gets off-point.</p><p>The fact you always send the full conversation makes context management easier. It means you can massage the context inside the window to get rid of knots behind the shoulderblade and keep it as semantically packed as possible. Even if you get a one million dollar- sorry, token window, you will still experience rot and drift.</p><p>It also means that you can pick up the context from one agent and dump it into another and carry on the session. You can therefore get rid of the thinking tokens and tool call overhead to only keep what is semantically relevant.</p><p>Context has its own lifecycle. You start with the system prompt, tool definitions, user prompt, conversation, reasoning, tool calls, etc. So when thinking about managing context for these long-running sessions, we should think about what to do throughout the lifecycle.</p><h3 id="create-and-understand-context">Create (and understand) context</h3><p>Context is built naturally as you use the LLM. What you need to be intentional about is visibility of what goes in the window. Gumloop has this cool Context Usage Meter that gives you real-time visibility into how much of the LLMs model’s context window is being used during a conversation. It shows token breakdown with categories like:</p><ul><li>System</li><li>AI Instructions</li><li>Abilities</li><li>Tools</li><li>Skills</li><li>Subagents</li><li>Conversation</li></ul><p>In long-running agents, you will see that conversation portion increases while the system prompt tool definitions remain stable.</p><h3 id="compress-context">Compress context</h3><p>As context accrues, you can trim semantically irrelevant tokens and summarize larger chunks into semantically equivalent smaller chunks.</p><p>Google’s ADK Context Compaction reduces the size of context by summarizing older parts of the agent workflow event history. It uses a sliding window approach for collecting and summarizing agent workflow event data within a session. It summarizes data from older events once it reaches a threshold of a specific number of workflow events, or invocations, with the current session.</p><p>You can’t get away with constantly summarizing previous context. At some point, the harness should perform a full context reset. This means it will tear down the session and rebuild the next request from durable artifacts, explored in the next session.</p><h3 id="store-context">Store context</h3><p>LLMs are stateless, so if your context is ephemeral, you will lose the whole agent session. You can, however, write context in persistent storage. Bonus points for architecting these as immutable ledgers, where agents can write, and read, but not modify or delete.</p><p>These storage services must be provisioned by you, the developer, where you can define permissions deterministically. Asking the LLM “pls never update ledger pls” is not software engineering.</p><p>What goes in the storage is up to you. Dump the whole window, summarize it, write H1s only, etc.</p><p>In Google’s EAP, memory generation bundles several of these decisions together.</p><ul><li>Extraction pulls only the most meaningful information out of the source data to persist as memories, rather than dumping everything in.</li><li>Consolidation merges newly extracted information with what already exists, letting memories evolve as new information is ingested.</li><li>Generation runs asynchronously in the background, so the agent doesn't have to wait for it to complete.</li><li>Event ingestion streams and manages conversation events continuously, automatically triggering generation based on batching rules you configure.</li><li>And extraction is customizable. You tell Memory Bank what counts as meaningful by giving it specific topics and few-shot examples.</li></ul><h3 id="recall-context">Recall context</h3><p>With stored context, you can use the ledger as a reconstruction mechanism. On a fresh session, an agent can read the durable plan, the progress notes, and the append-only record of what has already happened to reconstruct "where am I" without replaying the full conversation history.</p><p>As Cloudflare put it, you can fire 20% of your employees to replace them with AI and use the Agent’s plan as context. If the agent has a structured plan, the plan itself provides sufficient context: "I am on step 3 of 7, the step was 'await the sanctions-check result', and the result just arrived."</p><p>Once again in Google's EAP, managed storage and retrieval brings its own set of features.</p><ul><li>Consolidation and retrieval are isolated per identity, so one entity's memories don't bleed into another's.</li><li>Storage is persistent and accessible from multiple environments: Agent Runtime, your local environment, or other deployment options. Retrieval can use similarity search scoped to a specific identity, pulling only what's relevant rather than everything.</li><li>A time-to-live can be set so stale information expires automatically, with the TTL applied to inserted or generated memories.</li><li>Revisions are maintained automatically, letting you inspect how a memory transforms as new information is ingested.</li><li>IAM conditions restrict which principals can read or write a given scope's memories.</li></ul><h3 id="identity-as-a-context-management-concern">Identity as a context-management concern</h3><p>You can retrieve all the memories scoped to a particular user identity. A memory's scope is defined when the memory is generated or created and is immutable.</p><p>That makes identity-scoped memory durable across separate jobs and sessions for a given user or entity. In Google's Agent Memory Bank, memories are extracted and consolidated via an LLM from session events, scoped to a user or agent identity, retrieved via similarity search, and managed with TTL-based expiry and revision history.</p><p>In Cloudflare, Identity is a durable, addressable property of the agent. Durable Object identity persists across hibernation/restart without re-establishment; this is the anchor that lets task state and identity memory be found again after a crash.</p><p>This durability quality requires additional mechanism for ensuring continuity across instances and through failure points, which we address in the following part.</p><h2 id="part-2-durable-execution">Part 2: Durable Execution</h2><p>As part of your context management, you now have some persistent storage. Cool, you can use it to pull the context back into an agent if you lose the session.</p><p>“Hey Claude, retrieve this and pick up fro-”</p><p>No!</p><p>We look at deterministic ways of resuming agents in case of failure.</p><p>A long-running agent doesn’t run for long. It runs when needed, keeping track of tasks, context, and previous context. Expect the agent to wait quite a lot. But as we discussed in the first part, LLMs always get the whole conversation request with every prompt, so the whole concept of durability comes to “how do I structure this data effectively such that task-to-task the LLM behaves consistently”.</p><h3 id="what-persists-and-what-doesn%E2%80%99t-need-to"><strong>What persists, and what doesn’t need to</strong></h3><p>Referring back to Cloudflare’s piece, their long-running agent pattern ensures the following persists across calls:</p><ul><li>Agent state, the persistent data the agent requires to continue a session</li><li>All SQLite tables created, including abstractions built on SQLite</li><li>Scheduled tasks, which are stored in SQLite, trigger alarms to wake the agent</li><li>Connection states for each WebSocket client</li></ul><p>The following don’t need to survive:</p><ul><li>In-memory variables</li><li>Running timers</li><li>Open HTTP calls</li><li>Callbacks and promise chains</li></ul><p>An agent has an identity and persistent state. It does not need an active compute instance. It can be configured to wake on an event and go back to sleep upon completion. Wake sources are the agent's entire interface to the outside world; you don't need an always-on loop required to keep an agent "running" over weeks.</p><p>To wake an agent up, you can use a webhook callback, where the agent kicks off external work, registers its own callback URL, and hibernates, waking only when the callback arrives. You can also define polling with backoff for services that don't support callbacks. The agent schedules a poll, reschedules it with an increasing delay, and caps the interval.</p><p>Lastly, you can define wide automation workflows with, independently-retryable multi-step pipeline, and hand it to a dedicated workflow engine rather than managing the step sequencing inside the agent.</p><p>Sub-agents get this same durability on their own terms. Each child has its own state, schedules, durable fibers, and lifecycle, and stores its own data colocated under the parent.</p><p>The property that matters for durability is that the parent doesn't have to stay active while the child works. It can start the work, hibernate, and be woken when the child's schedule or recovery check fires. A crash doesn't take down the whole family at once; each identity is recoverable on its own.</p><h3 id="token-and-rate-limit-monitoring-as-a-predictive-signal"><strong>Token and rate-limit monitoring as a predictive signal</strong></h3><p>With per-session and per-tenant token consumption monitoring, you can define continuation and retry policies when hitting rate-limits or errors. If cumulative usage trajectory projects a rate-limit hit before the next checkpoint, the harness can proactively checkpoint, throttle, or switch model/provider.</p><h3 id="recovery-mechanics"><strong>Recovery mechanics</strong></h3><p>Recovery at the coarsest level can be a session that reads the ledger on startup. A simple "where am I" check can resume the task even without finer policies. You can then persist a row for the duration of a piece of work, stash intermediate state at defined points, and recover from the last stash on restart.</p><p>Idempotency matters here for durable acceptance, particularly for webhook-driven agents where callers retry delivery and duplicate side effects must be avoided. The general pattern underneath all of this is event-sourcing or journal-based recovery:</p><p>We described an immutable task ledger consisting of the agent’s plan: <em>what should happen</em>, in what order, etc. You also need a separate append-only execution log containing what actually happened, containing every tool call, every model response, every state transition. It can be replayed deterministically to reconstruct the state, regardless of which process or container resumes the work.</p><p>This is the underlying idea in Restate's journal feature and DBOS's workflow/step annotations.</p><p>Restate persists every step before proceeding and replays deterministically to reconstruct pre-crash state, while DBOS checkpoints into Postgres.</p><p>These tools also offer compensation and rollback mechanisms for agents that need to undo partial work when failures occur. When agents perform multiple actions and something goes wrong, you need to systematically undo the changes to maintain consistency.</p><h3 id="durable-execution-vendor-landscape"><strong>Durable execution vendor landscape</strong></h3><p>You can look at different implementation ideas by evaluating the vendors such as DBOS, Restate, Inngest. Some general examples include:</p><ul><li><strong>Suspend-and-resume on external events</strong> — first-class primitives for pausing a workflow until a signal arrives (a webhook, an approval, a human decision) and resuming it later, potentially across redeploys, without holding compute open while waiting.</li><li><strong>Flow control and concurrency limits</strong> — durable queues with per-tenant or per-workflow concurrency caps and rate limits, so retries and fan-out don't overwhelm downstream systems.</li><li><strong>Durability expressed in application code vs. a separate orchestration layer</strong>: some make durability transparent to ordinary control flow (a library or annotations in your language), others offer it as a managed platform primitive with its own execution model.</li></ul><p>You can also design your own durable execution logic in n8n by implementing its deterministic workflow-based features to define retries, writing data in persistent storage, deterministic triggers such as schedules and webhooks.</p><h3 id="identity-as-a-durability-property"><strong>Identity as a durability property</strong></h3><p>In Cloudflare's model the agent's name is the routing key, and that identity persists across hibernation, restart, and redeploy. Credentials are scoped per agent or sub-agent identity. The payoff for durability is attribution: because identity is durable, every entry in the execution log ties back to a persistent agent identity.</p><p>At the platform level, Google's Agent Identity and Registry are the productized version of this, tracking which identity, at which version, is running which task.</p><h2 id="part-3-task-progression-evaluation">Part 3: Task Progression &amp; Evaluation</h2><p>You’ll notice your agent slowly slipping into mistakes and hallucinations. To determine whether the agent is still on task without asking it, most AI engineers found the perfect solution: ask another LLM.</p><p>Huh…</p><p>LLM-as-judge is the easiest fix and the least reliable one. It's the same model class making the same kind of error, one level removed. This article is about minimizing how much progress validation depends on any LLM's judgment at all, and where an LLM is still useful, constraining it to narrow, checkable roles.</p><h3 id="the-checklist-as-the-unit-of-progress"><strong>The checklist as the unit of progress</strong></h3><p>In a task ledger or checklist, each entry needs a completion criterion defined before an agent executes against it. Writing down the done condition before the agent starts is the single highest-leverage move, precisely because it stops the agent from redefining "done" mid-run.</p><p>The companion rule is to work one entry at a time. Working a single entry per pass keeps the agent from trying to do everything at once and leaving things half-done, and it makes validation tractable, since each pass has exactly one claimed state transition to check.</p><h3 id="deterministic-validation-gates"><strong>Deterministic validation gates</strong></h3><p>The alternative to "ask the model if it's done" is to run a check against the execution log or live system state that returns a boolean, independent of any model call.</p><p>A taxonomy of gate types, from cheapest/most reliable to more involved:</p><ul><li><strong>Status/response codes</strong>: did the API call return 200, not 4xx/5xx.</li><li><strong>Schema validation</strong>: does the response parse as valid JSON/XML and match an expected shape (required fields present, correct types).</li><li><strong>Cross-field consistency checks</strong>: does the username in the response payload match the identity of the requesting user; does a returned ID match the one requested.</li><li><strong>State-diff checks</strong>: did the thing the step claimed to create/update/delete actually appear/change/disappear in the target system (re-query after the action).</li><li><strong>Test execution</strong>: unit/integration tests run against code changes.</li></ul><p>Other mechanism for validating activities include:</p><p><strong>State machines for valid progress</strong> - A Finite-state-machine approach to semantic parsing defines states as tool-call/step types and transitions as the allowable sequences between them; the observed action sequence is parsed through the FSM at runtime. States outside the machine are violations; unexpected transitions are anomalies. With a small fixed set of legal states, each transition can be validated against the execution log before it's committed to the ledger.</p><p><strong>Sandboxing and behavioral baselines</strong> - you can also run the agent in a controlled environment first (the sandbox) and observe what it actually does: which tools it calls, what data volumes it moves, what destinations it reaches, what system calls it makes. You can then:</p><ul><li>Graduate specific actions to production once observed-safe, ideally as deterministic allowlist entries rather than re-invoking an agent's judgment;</li><li>Use the profile as the reference baseline for least-privilege permissions and deviation alerting.</li></ul><p><strong>Non-generative checks for agent behavior </strong>- Some useful checks don't generate text at all. Encoder-only classifiers (BERT-family models such as DeBERTa, RoBERTa, or ModernBERT) can be fine-tuned on labeled aligned/misaligned or benign/malicious examples and output a scalar against a threshold, giving you a verdict without a generative model in the loop.</p><p><strong>Anomaly detection on tool-call patterns</strong> - monitoring recursive loops (same tool called repeatedly with minor argument variations), token count spikes, out-of-order executions and kills the run before they accrue.</p><p><strong>Acceptable LLM-as-judge usage</strong></p><p>Intent evaluation is only possible if intent was explicitly defined <em>before</em> execution</p><p>‘Explicit’ means an enumerated tool allowlist, a defined sequence of steps or states the task must cycle through, defined data sources, defined rules-based mechanisms for spawning sub-agents, and defined API endpoints and methods.</p><p>Once that exists, evaluation collapses into a set of Yes/No questions asked against the execution log: did this step execute, were the fields filled in correctly, did the call return the expected code, was the retrieved data validated against its schema, etc.</p><p>Where an LLM is used for evaluation at all, it should be constrained to a narrow, checkable judgment. For example "does this trace match taxonomy category X." That's acceptable precisely because the model is acting as a fuzzy compiler mapping observed behavior onto a deterministic category, not inventing "good" on the fly.</p><h2 id="implementation">Implementation</h2><p>Everything described in this article will span across multiple products and require ongoing engineering. Do not treat this as a step-by-step blueprint or framework for how to construct reliable long-running agents, but rather an exploration of the deterministic components which are overlooked by all self-titled loop engineering experts.</p><p>I will continue exploring these topics and how they apply for n8n and in the wide market. I welcome improvements, feedback and corrections, so please <a href="https://www.linkedin.com/in/andrew-green-tech/">reach out to me on LinkedIn.</a></p>
		<!-- Share with us section -->
		<div class="post-share-section">
			<div class="post-share-content">
				<h2 class="post-share-title">Share with us</h2>
				<div class="post-share-body">
					<p>n8n users come from a wide range of backgrounds, experience levels, and interests. We have been looking to highlight different users and their projects in our blog posts. If you're working with n8n and would like to inspire the community, <a href="https://n8n-community.typeform.com/to/VYiRI7WN?ref=blog.n8n.io">contact us</a> 💌</p>
				</div>
			</div>


			<!-- Share buttons -->
			<div class="post-share-buttons">
				<span class="post-share-label">SHARE</span>
				<div class="post-share-icons">
					<a href="#" class="post-share-link" onclick="copyToClipboard(window.location.href); return false;">
						<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
							<path d="M11.293 8.293L7.58604 4.58604C6.80499 3.80499 5.53866 3.80499 4.75761 4.58604C3.97656 5.36709 3.97656 6.63342 4.75761 7.41447L8.46458 11.1214C9.24563 11.9025 10.512 11.9025 11.293 11.1214C12.0741 10.3404 12.0741 9.07405 11.293 8.293Z" stroke="#E8E5EB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
							<path d="M12.707 15.707L16.414 19.414C17.195 20.195 18.4613 20.195 19.2424 19.414C20.0234 18.6329 20.0234 17.3666 19.2424 16.5855L15.5354 12.8786C14.7544 12.0975 13.488 12.0975 12.707 12.8786C11.9259 13.6596 11.9259 14.9259 12.707 15.707Z" stroke="#E8E5EB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
							<path d="M14.8285 9.17145L9.17145 14.8285" stroke="#E8E5EB" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
						</svg>
					</a>
					<a href="https://twitter.com/intent/tweet?text=Long-running%20agents%20beyond%20prompt%20engineering&url=https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/" target="_blank" rel="noopener" class="post-share-twitter">
						<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
							<path d="M17.75 3.75H20.5L13.93 11.18L21.64 20.25H15.67L10.99 14.32L5.64 20.25H2.89L9.91 12.4L2.5 3.75H8.64L12.87 9.16L17.75 3.75ZM16.49 18.47H18.14L7.74 5.44H5.97L16.49 18.47Z" fill="#E8E5EB"/>
						</svg>
					</a>
					<a href="https://www.linkedin.com/sharing/share-offsite/?url=https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/" target="_blank" rel="noopener" class="post-share-linkedin">
						<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg">
							<path d="M20.447 20.452H16.893V14.883C16.893 13.555 16.866 11.846 15.041 11.846C13.188 11.846 12.905 13.291 12.905 14.785V20.452H9.351V9H12.765V10.561H12.811C13.288 9.661 14.448 8.711 16.181 8.711C19.782 8.711 20.448 11.081 20.448 14.166V20.452H20.447ZM5.337 7.433C4.193 7.433 3.274 6.507 3.274 5.368C3.274 4.23 4.194 3.305 5.337 3.305C6.477 3.305 7.401 4.23 7.401 5.368C7.401 6.507 6.476 7.433 5.337 7.433ZM7.119 20.452H3.555V9H7.119V20.452ZM22.225 0H1.771C0.792 0 0 0.774 0 1.729V22.271C0 23.227 0.792 24 1.771 24H22.222C23.2 24 24 23.227 24 22.271V1.729C24 0.774 23.2 0 22.222 0H22.225Z" fill="#E8E5EB"/>
						</svg>
					</a>
				</div>
			</div>
		</div>
		</div>
	</div>
</article>

<aside class="post-navigation-section">
	<div class="post-navigation-wrap">
		<a href="/idempotency-api/" class="post-navigation-card" aria-label="How To Build Reliable Workflows With API Idempotency">
			<div class="post-navigation-thumbnail">
				<div class="post-navigation-image" style="background-image: url(https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2026/09/TL--16-.jpeg)"></div>
			</div>
			<div class="post-navigation-content">
				<div class="post-navigation-header">
					<h3 class="post-navigation-title">How To Build Reliable Workflows With API Idempotency</h3>
				</div>
				<div class="post-navigation-label">Newer post</div>
			</div>
		</a>
		<a href="/rbac-for-ai-agents/" class="post-navigation-card" aria-label="RBAC for AI Agents: Why Static Roles Break and What Replaces Them">
			<div class="post-navigation-thumbnail">
				<div class="post-navigation-image" style="background-image: url(https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2026/08/TL-3_BlogHeader_rbac-ai-agents_6_11zon.jpg)"></div>
			</div>
			<div class="post-navigation-content">
				<div class="post-navigation-header">
					<h3 class="post-navigation-title">RBAC for AI Agents: Why Static Roles Break and What Replaces Them</h3>
				</div>
				<div class="post-navigation-label">Older post</div>
			</div>
		</a>
	</div>
</aside><div class="comments-section">
	<div class="comments-wrap">
			</div>
</div>
<section class="post-related-section"
         data-related-api
         data-post-url="https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/"
         data-tag-name="AI"
         style="display:none">
  <div class="post-related-container">
    <div class="post-related-header">
      <h2 class="post-related-title">Other guides to get you going</h2>
    </div>
    <div class="post-related-grid"></div>
  </div>
</section>
<section class="post-workflows-section"
         data-workflows-api
         data-post-url="https://blog.n8n.io/long-running-agents-beyond-prompt-engineering/"
         style="display:none">
  <div class="post-workflows-container">
    <div class="post-workflows-header">
      <h2 class="post-workflows-title">Where there's a will, there's already a workflow</h2>
    </div>
    <div class="post-workflows-grid"></div>
  </div>
</section>
<!--<section class="post-latest-section">
	<div class="post-latest-container">
		<div class="post-latest-header">
			<h2 class="post-latest-title">Latest n8n guides</h2>
		</div>
		<div class="post-latest-grid">
			<article class="post-latest-card post tag-guides tag-ai-9">
	<a href="/mcp-vs-api/" class="global-link" aria-label="MCP vs. API: Key Differences and When To Use Each"></a>
	<div class="post-latest-card-container">
		<a href="/mcp-vs-api/" class="post-latest-card-image global-image">
			<img srcset="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w400/2026/09/TL--17-.jpeg 400w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/TL--17-.jpeg 600w, 
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w800/2026/09/TL--17-.jpeg 800w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/09/TL--17-.jpeg 1200w"
	 sizes="(max-width:480px) 350px, 500px"
	 src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/TL--17-.jpeg"
	 loading="lazy"
	 alt="MCP vs. API: Key Differences and When To Use Each">
		</a>
		<div class="post-latest-card-content">
			<div class="post-latest-card-tags global-tags">
								<a href="/tag/guides/">Guides</a><a href="/tag/ai-9/">AI</a>
			</div>
			<div class="post-latest-card-copy">
				<h3 class="post-latest-card-title"><a href="/mcp-vs-api/">MCP vs. API: Key Differences and When To Use Each</a></h3>
				<div class="post-latest-card-authors global-meta">
					<a href="/author/marketing/">n8n team</a>, <a href="/author/yulia/">Yulia Dmitrievna</a>
				</div>
			</div>
		</div>
	</div>
</article>			<article class="post-latest-card post tag-guides tag-ai-9">
	<a href="/autonomous-ai-agents/" class="global-link" aria-label="Autonomous AI Agents: Architecture and Risk Mitigation"></a>
	<div class="post-latest-card-container">
		<a href="/autonomous-ai-agents/" class="post-latest-card-image global-image">
			<img srcset="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w400/2026/09/TL-2_BlogHeader_autonomous-ai-agents--1-.jpg 400w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/TL-2_BlogHeader_autonomous-ai-agents--1-.jpg 600w, 
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w800/2026/09/TL-2_BlogHeader_autonomous-ai-agents--1-.jpg 800w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/09/TL-2_BlogHeader_autonomous-ai-agents--1-.jpg 1200w"
	 sizes="(max-width:480px) 350px, 500px"
	 src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/TL-2_BlogHeader_autonomous-ai-agents--1-.jpg"
	 loading="lazy"
	 alt="Autonomous AI Agents: Architecture and Risk Mitigation">
		</a>
		<div class="post-latest-card-content">
			<div class="post-latest-card-tags global-tags">
								<a href="/tag/guides/">Guides</a><a href="/tag/ai-9/">AI</a>
			</div>
			<div class="post-latest-card-copy">
				<h3 class="post-latest-card-title"><a href="/autonomous-ai-agents/">Autonomous AI Agents: Architecture and Risk Mitigation</a></h3>
				<div class="post-latest-card-authors global-meta">
					<a href="/author/marketing/">n8n team</a>, <a href="/author/yulia/">Yulia Dmitrievna</a>
				</div>
			</div>
		</div>
	</div>
</article>			<article class="post-latest-card post">
	<a href="/introducing-n8n-assistant/" class="global-link" aria-label="Introducing n8n Assistant"></a>
	<div class="post-latest-card-container">
		<a href="/introducing-n8n-assistant/" class="post-latest-card-image global-image">
			<img srcset="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w400/2026/09/Blog-header---n8n-Assistant-Launch.jpg 400w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/Blog-header---n8n-Assistant-Launch.jpg 600w, 
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w800/2026/09/Blog-header---n8n-Assistant-Launch.jpg 800w,
			 https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w1200/2026/09/Blog-header---n8n-Assistant-Launch.jpg 1200w"
	 sizes="(max-width:480px) 350px, 500px"
	 src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/size/w600/2026/09/Blog-header---n8n-Assistant-Launch.jpg"
	 loading="lazy"
	 alt="Introducing n8n Assistant">
		</a>
		<div class="post-latest-card-content">
			<div class="post-latest-card-tags global-tags">
								
			</div>
			<div class="post-latest-card-copy">
				<h3 class="post-latest-card-title"><a href="/introducing-n8n-assistant/">Introducing n8n Assistant</a></h3>
				<div class="post-latest-card-authors global-meta">
					<a href="/author/paul/">Paul Gordon, n8n</a>
				</div>
			</div>
		</div>
	</div>
</article>		</div>
	</div>
</section>
-->

					<!-- <div class="subscribe-section">
	<div class="subscribe-wrap">
		<h3>Subscribe to new posts</h3>
		<form data-members-form="subscribe" class="subscribe-form">
			<input data-members-email type="email" placeholder="Your email address" aria-label="Your email address" required>
			<button class="global-button" type="submit">Subscribe</button>
		</form>
		<div class="subscribe-alert">
			<small class="alert-loading global-alert">Processing your application</small>
			<small class="alert-success global-alert">Please check your inbox and click the link to confirm your subscription</small>
			<small class="alert-error global-alert">There was an error sending the email</small>
		</div>
	</div>
</div>
 -->
				</main>
				<!-- Mobile Footer (hidden on desktop, shown on mobile) -->
<footer class="footer-mobile">
	<div class="footer-mobile-container">

		<!-- Logo and Tagline Section -->
		<div class="footer-mobile-brand">
			<div class="footer-mobile-logo">
				<a href="https://blog.n8n.io"><img src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2025/09/n8n-Logo.svg" alt="n8n Blog"></a>
			</div>
			<p class="footer-mobile-tagline">Automate without limits</p>

			<!-- Social Icons -->
			<div class="footer-mobile-social">
				<a href="https://x.com/n8n_io" aria-label="X (Twitter)"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z"/></svg></a>
				<a href="https://github.com/n8n-io/n8n" aria-label="GitHub"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a>
				<a href="https://discord.gg/n8n" aria-label="Discord"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.468-2.14-1.404-2.14-1.404s.134.066.335.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.404.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334.002-.74.573-1.338 1.27-1.338zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334 0-.74.57-1.338 1.27-1.338z"/></svg></a>
				<a href="https://www.linkedin.com/company/n8n/" aria-label="LinkedIn"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg></a>
				<a href="https://www.youtube.com/c/n8n-io" aria-label="YouTube"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path class="a" d="M23.495 6.205a3.007 3.007 0 0 0-2.088-2.088c-1.87-.501-9.396-.501-9.396-.501s-7.507-.01-9.396.501A3.007 3.007 0 0 0 .527 6.205a31.247 31.247 0 0 0-.522 5.805 31.247 31.247 0 0 0 .522 5.783 3.007 3.007 0 0 0 2.088 2.088c1.868.502 9.396.502 9.396.502s7.506 0 9.396-.502a3.007 3.007 0 0 0 2.088-2.088 31.247 31.247 0 0 0 .5-5.783 31.247 31.247 0 0 0-.5-5.805zM9.609 15.601V8.408l6.264 3.602z"/></svg></a>
				

			</div>
		</div>

		<!-- Primary Links Section -->
		<div class="footer-mobile-links">
			<div class="footer-mobile-section">
				<ul class="footer-mobile-list">
					<li><a href="https://n8n.io/careers">Careers</a></li>
					<li><a href="https://n8n.io/contact">Contact</a></li>
					<li><a href="https://merch.n8n.io/">Merch</a></li>
					<li><a href="https://n8n.io/press">Press</a></li>
					<li><a href="https://n8n.io/security">Security</a></li>
				</ul>
			</div>

			<!-- Secondary Links Section -->
			<div class="footer-mobile-section">
				<ul class="footer-mobile-list">
					<li><a href="https://n8n.io/case-studies">Case studies</a></li>
					<li><a href="https://n8n.io/vs/zapier/">Zapier vs n8n</a></li>
					<li><a href="https://n8n.io/vs/make/">Make vs n8n</a></li>
					<li><a href="https://n8n.io/workflows/160-convert-xml-to-json/">XML to JSON converter</a></li>
				</ul>
			</div>

			<!-- Tertiary Links Section -->
			<div class="footer-mobile-section">
				<ul class="footer-mobile-list">
					<li><a href="https://n8n.io/affiliates/">Affiliate program</a></li>
					<li><a href="https://n8n.io/become-an-expert">Become an expert</a></li>
					<li><a href="https://luma.com/n8n-events">Events</a></li>
				</ul>
			</div>
		</div>

		<!-- Dropdown Sections -->
		<div class="footer-mobile-dropdowns">
			<div class="footer-mobile-dropdown">
				<button class="footer-dropdown-toggle" data-dropdown="popular-integrations">
					<span>Popular integrations</span>
					<svg class="dropdown-chevron" width="20" height="20" viewBox="0 0 20 20" fill="none">
						<path d="M5 7.5L10 12.5L15 7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
					</svg>
				</button>
				<div class="footer-dropdown-content" id="popular-integrations">
					<ul>
						<li><a href="https://n8n.io/integrations/google-sheets">Google Sheets</a></li>
						<li><a href="https://n8n.io/integrations/telegram">Telegram</a></li>
						<li><a href="https://n8n.io/integrations/mysql">MySQL</a></li>
						<li><a href="https://n8n.io/integrations/slack">Slack</a></li>
						<li><a href="https://n8n.io/integrations/discord">Discord</a></li>
						<li><a href="https://n8n.io/integrations/postgres">PostgreSQL</a></li>
					</ul>
					<a href="https://n8n.io/integrations" class="footer-show-more">Show more</a>
				</div>
			</div>

			<div class="footer-mobile-dropdown">
				<button class="footer-dropdown-toggle" data-dropdown="trending-combinations">
					<span>Trending combinations</span>
					<svg class="dropdown-chevron" width="20" height="20" viewBox="0 0 20 20" fill="none">
						<path d="M5 7.5L10 12.5L15 7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
					</svg>
				</button>
				<div class="footer-dropdown-content" id="trending-combinations">
					<ul>
						<li><a href="https://n8n.io/workflows">Google Sheets + Slack</a></li>
						<li><a href="https://n8n.io/workflows">Discord + MySQL</a></li>
						<li><a href="https://n8n.io/workflows">Telegram + PostgreSQL</a></li>
					</ul>
					<a href="https://n8n.io/workflows" class="footer-show-more">Show more</a>
				</div>
			</div>

			<div class="footer-mobile-dropdown">
				<button class="footer-dropdown-toggle" data-dropdown="technical-teams">
					<span>Used by technical teams</span>
					<svg class="dropdown-chevron" width="20" height="20" viewBox="0 0 20 20" fill="none">
						<path d="M5 7.5L10 12.5L15 7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
					</svg>
				</button>
				<div class="footer-dropdown-content" id="technical-teams">
					<ul>
						<li><a href="https://n8n.io/use-cases/development">Development Teams</a></li>
						<li><a href="https://n8n.io/use-cases/devops">DevOps</a></li>
						<li><a href="https://n8n.io/use-cases/infrastructure">Infrastructure</a></li>
					</ul>
					<a href="https://n8n.io/use-cases" class="footer-show-more">Show more</a>
				</div>
			</div>

			<div class="footer-mobile-dropdown">
				<button class="footer-dropdown-toggle" data-dropdown="integration-categories">
					<span>Top integration categories</span>
					<svg class="dropdown-chevron" width="20" height="20" viewBox="0 0 20 20" fill="none">
						<path d="M5 7.5L10 12.5L15 7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
					</svg>
				</button>
				<div class="footer-dropdown-content" id="integration-categories">
					<ul>
						<li><a href="https://n8n.io/integrations/databases">Databases</a></li>
						<li><a href="https://n8n.io/integrations/communication">Communication</a></li>
						<li><a href="https://n8n.io/integrations/productivity">Productivity</a></li>
					</ul>
					<a href="https://n8n.io/integrations" class="footer-show-more">Show more</a>
				</div>
			</div>

			<div class="footer-mobile-dropdown">
				<button class="footer-dropdown-toggle" data-dropdown="trending-templates">
					<span>Trending templates</span>
					<svg class="dropdown-chevron" width="20" height="20" viewBox="0 0 20 20" fill="none">
						<path d="M5 7.5L10 12.5L15 7.5" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
					</svg>
				</button>
				<div class="footer-dropdown-content" id="trending-templates">
					<ul>
						<li><a href="https://n8n.io/workflows">Automated Data Sync</a></li>
						<li><a href="https://n8n.io/workflows">Lead Generation</a></li>
						<li><a href="https://n8n.io/workflows">Customer Support</a></li>
					</ul>
					<a href="https://n8n.io/workflows" class="footer-show-more">Show more</a>
				</div>
			</div>
		</div>

		<!-- Legal Links and Copyright -->
		<div class="footer-mobile-bottom">
			<div class="footer-mobile-legal">
				<a href="https://n8n.io/imprint/">Imprint</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/security/">Security</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/privacy/">Privacy</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/vulnerability-disclosure-policy/">Report a vulnerability</a>
			</div>
			<div class="footer-mobile-copyright">
				<p>© 2026 n8n | All rights reserved.</p>
			</div>
		</div>
	</div>
</footer>
<!-- Desktop Footer (shown on desktop, hidden on mobile) -->
<footer class="blog-footer footer-desktop">
	<div class="blog-footer-container">

		<!-- Logo and Social Section -->
		<div class="footer-brand">
			<div class="footer-brand-left">
				<div class="footer-logo">
					<a href="https://blog.n8n.io"><img src="https://storage.ghost.io/c/0d/78/0d78b34c-0c5f-4975-900e-61d00ccb1c2d/content/images/2025/09/n8n-Logo.svg" alt="n8n Blog"></a>
				</div>
				<p class="footer-tagline">Automate without limits</p>
				<div class="footer-social">
					<a href="https://x.com/n8n_io" aria-label="X (Twitter)"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M23.954 4.569c-.885.389-1.83.654-2.825.775 1.014-.611 1.794-1.574 2.163-2.723-.951.555-2.005.959-3.127 1.184-.896-.959-2.173-1.559-3.591-1.559-2.717 0-4.92 2.203-4.92 4.917 0 .39.045.765.127 1.124C7.691 8.094 4.066 6.13 1.64 3.161c-.427.722-.666 1.561-.666 2.475 0 1.71.87 3.213 2.188 4.096-.807-.026-1.566-.248-2.228-.616v.061c0 2.385 1.693 4.374 3.946 4.827-.413.111-.849.171-1.296.171-.314 0-.615-.03-.916-.086.631 1.953 2.445 3.377 4.604 3.417-1.68 1.319-3.809 2.105-6.102 2.105-.39 0-.779-.023-1.17-.067 2.189 1.394 4.768 2.209 7.557 2.209 9.054 0 13.999-7.496 13.999-13.986 0-.209 0-.42-.015-.63.961-.689 1.8-1.56 2.46-2.548l-.047-.02z"/></svg></a>
					<a href="https://github.com/n8n-io/n8n" aria-label="GitHub"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M12 .297c-6.63 0-12 5.373-12 12 0 5.303 3.438 9.8 8.205 11.385.6.113.82-.258.82-.577 0-.285-.01-1.04-.015-2.04-3.338.724-4.042-1.61-4.042-1.61C4.422 18.07 3.633 17.7 3.633 17.7c-1.087-.744.084-.729.084-.729 1.205.084 1.838 1.236 1.838 1.236 1.07 1.835 2.809 1.305 3.495.998.108-.776.417-1.305.76-1.605-2.665-.3-5.466-1.332-5.466-5.93 0-1.31.465-2.38 1.235-3.22-.135-.303-.54-1.523.105-3.176 0 0 1.005-.322 3.3 1.23.96-.267 1.98-.399 3-.405 1.02.006 2.04.138 3 .405 2.28-1.552 3.285-1.23 3.285-1.23.645 1.653.24 2.873.12 3.176.765.84 1.23 1.91 1.23 3.22 0 4.61-2.805 5.625-5.475 5.92.42.36.81 1.096.81 2.22 0 1.606-.015 2.896-.015 3.286 0 .315.21.69.825.57C20.565 22.092 24 17.592 24 12.297c0-6.627-5.373-12-12-12"/></svg></a>
					<a href="https://discord.gg/n8n" aria-label="Discord"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.222 0c1.406 0 2.54 1.137 2.607 2.475V24l-2.677-2.273-1.47-1.338-1.604-1.398.67 2.205H3.71c-1.402 0-2.54-1.065-2.54-2.476V2.48C1.17 1.142 2.31.003 3.715.003h16.5L20.222 0zm-6.118 5.683h-.03l-.202.2c2.073.6 3.076 1.537 3.076 1.537-1.336-.668-2.54-1.002-3.744-1.137-.87-.135-1.74-.064-2.475 0h-.2c-.47 0-1.47.2-2.81.735-.467.203-.735.336-.735.336s1.002-1.002 3.21-1.537l-.135-.135s-1.672-.064-3.477 1.27c0 0-1.805 3.144-1.805 7.02 0 0 1 1.74 3.743 1.806 0 0 .4-.533.805-1.002-1.54-.468-2.14-1.404-2.14-1.404s.134.066.335.2h.06c.03 0 .044.015.06.03v.006c.016.016.03.03.06.03.33.136.66.27.93.4.466.202 1.065.403 1.8.536.93.135 1.996.2 3.21 0 .6-.135 1.2-.267 1.8-.535.39-.2.87-.4 1.397-.737 0 0-.6.936-2.205 1.404.33.466.795 1 .795 1 2.744-.06 3.81-1.8 3.87-1.726 0-3.87-1.815-7.02-1.815-7.02-1.635-1.214-3.165-1.26-3.435-1.26l.056-.02zm.168 4.413c.703 0 1.27.6 1.27 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334.002-.74.573-1.338 1.27-1.338zm-4.543 0c.7 0 1.266.6 1.266 1.335 0 .74-.57 1.34-1.27 1.34-.7 0-1.27-.6-1.27-1.334 0-.74.57-1.338 1.27-1.338z"/></svg></a>
					<a href="https://www.linkedin.com/company/n8n/" aria-label="LinkedIn"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"/></svg></a>
					<a href="https://www.youtube.com/c/n8n-io" aria-label="YouTube"><svg role="img" viewBox="0 0 24 24" xmlns="http://www.w3.org/2000/svg"><path class="a" d="M23.495 6.205a3.007 3.007 0 0 0-2.088-2.088c-1.87-.501-9.396-.501-9.396-.501s-7.507-.01-9.396.501A3.007 3.007 0 0 0 .527 6.205a31.247 31.247 0 0 0-.522 5.805 31.247 31.247 0 0 0 .522 5.783 3.007 3.007 0 0 0 2.088 2.088c1.868.502 9.396.502 9.396.502s7.506 0 9.396-.502a3.007 3.007 0 0 0 2.088-2.088 31.247 31.247 0 0 0 .5-5.783 31.247 31.247 0 0 0-.5-5.805zM9.609 15.601V8.408l6.264 3.602z"/></svg></a>
					

				</div>
			</div>
			<div class="footer-brand-right">
				<ul class="footer-primary-links">
					<li><a href="https://n8n.io/">n8n home</a></li>
					<li><a href="https://n8n.io/features/">Features</a></li>
					<li><a href="https://n8n.io/pricing/">Pricing</a></li>
					<li><a href="https://docs.n8n.io/">Docs</a></li>
					<li><a href="https://community.n8n.io/">Community</a></li>
				</ul>
			</div>
		</div>

		<!-- Bottom Section -->
		<div class="footer-bottom">
			<div class="footer-legal">
				<a href="https://n8n.io/imprint/">Imprint</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/security/">Security</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/privacy/">Privacy</a>
				<span class="footer-separator">|</span>
				<a href="https://n8n.io/legal/vulnerability-disclosure-policy/">Report a vulnerability</a>
			</div>
			<div class="footer-copyright">
				<p>© 2026 n8n | All rights reserved.</p>
			</div>
		</div>
	</div>
</footer>
			</div>
		</div>
		<div id="notifications" class="global-notification">
	<div class="subscribe">You’ve successfully subscribed to n8n Blog</div>
	<div class="signin">Welcome back! You’ve successfully signed in.</div>
	<div class="signup">Great! You’ve successfully signed up.</div>
	<div class="expired">Your link has expired</div>
	<div class="checkout-success">Success! Check your email for magic link to sign-in.</div>
</div>
				<script src="https://blog.n8n.io/assets/js/global.js?v=Wrm8OemR0lUQ9qP5"></script>
		<script src="https://blog.n8n.io/assets/js/post.js?v=mR1N_JBqRdiTUgjo"></script>
		<script src="https://blog.n8n.io/assets/js/toc.js?v=oPtDPMixJsjbTkh9"></script>
		
		<script>
!function(){"use strict";const p=new URLSearchParams(window.location.search),isAction=p.has("action"),isStripe=p.has("stripe"),success=p.get("success"),action=p.get("action"),stripe=p.get("stripe"),n=document.getElementById("notifications"),a="is-subscribe",b="is-signin",c="is-signup",d="is-expired",e="is-checkout-success";

function hideNotification() {
    n.classList.remove(a,b,c,d,e);
    window.history.replaceState(null,null,window.location.pathname);
}

if(p&&(isAction||isStripe)) {
    if(isAction) {
        if(action=="subscribe"&&success=="true") n.classList.add(a);
        if(action=="signin"&&success=="true") n.classList.add(b);
        if(action=="signup"&&success=="true") n.classList.add(c);
        if(success=="false") n.classList.add(d);
    }
    if(isStripe&&stripe=="success") n.classList.add(e);
    
    // Auto hide after 5 seconds
    setTimeout(hideNotification, 5000);
    
    // Click to close
    n.addEventListener('click', hideNotification);
}}();
</script>

		
		<script src="https://blog.n8n.io/assets/js/external-links.js?v=DikCkQ8Bvh7jO-3I"></script>
		
	</body>
</html>