<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Ai on 4sh.dev</title>
    <link>https://4sh.dev/tags/ai/</link>
    <description>Recent content in Ai on 4sh.dev</description>
    <image>
      <title>4sh.dev</title>
      <url>https://4sh.dev/images/Ash-Drawing.jpg</url>
      <link>https://4sh.dev/images/Ash-Drawing.jpg</link>
    </image>
    <generator>Hugo -- 0.147.9</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 13 Mar 2026 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://4sh.dev/tags/ai/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Building HiveLabs: Taking the AI Agent Team Concept to Production</title>
      <link>https://4sh.dev/posts/2026/building-hivelabs/</link>
      <pubDate>Fri, 13 Mar 2026 00:00:00 +0000</pubDate>
      <guid>https://4sh.dev/posts/2026/building-hivelabs/</guid>
      <description>&lt;p&gt;A couple of weeks ago I wrote about &lt;a href=&#34;https://4sh.dev/posts/2026/building-4shclaw/&#34;&gt;4shClaw&lt;/a&gt;, a personal multi-agent AI assistant running with Docker. It works. Agents spin up in containers, coordinate through a shared ledger, and build a game called &lt;a href=&#34;https://github.com/AshDevFr/GLORP&#34;&gt;GLORP&lt;/a&gt; autonomously. The architecture proved out the core ideas: container isolation, declarative capabilities, ephemeral agents, lead-agent orchestration.&lt;/p&gt;
&lt;p&gt;But 4shClaw is a personal tool. Single user, SQLite, filesystem IPC, Node.js host. That&amp;rsquo;s fine for me. It&amp;rsquo;s not fine for a team of five engineers at a fintech company who want the same thing on their infrastructure, with audit trails their compliance team will accept.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building 4shClaw: A Multi-Agent AI Assistant That Runs Your Life (and Builds Its Own Demo)</title>
      <link>https://4sh.dev/posts/2026/building-4shclaw/</link>
      <pubDate>Sat, 28 Feb 2026 00:00:00 +0000</pubDate>
      <guid>https://4sh.dev/posts/2026/building-4shclaw/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been trying to build personal AI assistants on and off for a while. Bots backed by LLM APIs, cron jobs that would run some automated task. None of them stuck really.&lt;/p&gt;
&lt;p&gt;Then &lt;a href=&#34;https://github.com/open-claw/open-claw&#34;&gt;OpenClaw&lt;/a&gt; came along and kicked off the personal AI assistant movement. It looked like what I wanted, until I looked under the hood. The thing wants access to &lt;em&gt;everything&lt;/em&gt;: your email, your calendar, your GitHub, your files, all funneled through a single Node.js process with shared memory and no real isolation. One bad prompt injection through an email summary could, in theory, access your GitHub token, your calendar credentials, and every other secret the system knows about. That&amp;rsquo;s not a hypothetical either: multiple critical CVEs in 2026 alone, all stemming from the same architecture.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bee AI n8n Workflows</title>
      <link>https://4sh.dev/posts/2025/n8n-nodes-bee-ai-workflows/</link>
      <pubDate>Thu, 03 Jul 2025 00:00:00 +0000</pubDate>
      <guid>https://4sh.dev/posts/2025/n8n-nodes-bee-ai-workflows/</guid>
      <description>&lt;h2 id=&#34;the-n8n-nodes-bee-ai-package&#34;&gt;The n8n-nodes-bee-ai Package&lt;/h2&gt;
&lt;p&gt;Blog Post: &lt;a href=&#34;../n8n-nodes-bee-ai&#34;&gt;Bee AI n8n node&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Github Repo: &lt;a href=&#34;https://github.com/AshDevFr/n8n-nodes-bee-ai&#34;&gt;AshDevFr/n8n-nodes-bee-ai&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&#34;sub-workflows-to-fetch-them-all&#34;&gt;Sub Workflows to fetch them all&lt;/h2&gt;







  




  &lt;h3 id=&#34;bee-ai---fetch-all-conversations&#34;&gt;Bee AI - Fetch all Conversations&lt;/h3&gt;
&lt;p&gt;Note: the Conversation model is a nested object, so because of that, I added a code node to flatten the results.&lt;/p&gt;
&lt;p&gt;Conversation (GET /v1/{userId}/conversations/{id} response):&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; class=&#34;chroma&#34;&gt;&lt;code class=&#34;language-json&#34; data-lang=&#34;json&#34;&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;nt&#34;&gt;&amp;#34;conversation&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;p&#34;&gt;{&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;mi&#34;&gt;3456789&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;nt&#34;&gt;&amp;#34;summary&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;:&lt;/span&gt; &lt;span class=&#34;s2&#34;&gt;&amp;#34;...&amp;#34;&lt;/span&gt;&lt;span class=&#34;p&#34;&gt;,&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;        &lt;span class=&#34;err&#34;&gt;...&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;    &lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span class=&#34;line&#34;&gt;&lt;span class=&#34;cl&#34;&gt;&lt;span class=&#34;p&#34;&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;n8n-demo workflow=&#39;{
  &amp;#34;nodes&amp;#34;: [
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;pagination&amp;#34;: {
          &amp;#34;page&amp;#34;: &amp;#34;={{ $json.page }}&amp;#34;,
          &amp;#34;limit&amp;#34;: 200
        },
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        240,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;47739e54-dd38-4e34-ba87-e22fd999500f&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;List all conversations&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;// Loop over input items and add a new field called &amp;#39;myNewField&amp;#39; to the JSON of each one\nconst workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nconst conversations = workflowStaticData.conversations || [];\n\nconversations.push(...$input.first().json.conversations);\n\nworkflowStaticData.conversations = conversations;\n\nreturn {conversations};&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        400,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;3c97a488-fd93-4aff-9e0d-801d9f35f7a2&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Merge Conversations&amp;#34;,
      &amp;#34;executeOnce&amp;#34;: true
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nreturn workflowStaticData.conversations;&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        720,
        40
      ],
      &amp;#34;id&amp;#34;: &amp;#34;dd321b6a-6476-45b0-861c-342417a7fb31&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Return All Conversations&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;content&amp;#34;: &amp;#34;## Conversations\nUsing a loop to go through paginated results&amp;#34;,
        &amp;#34;height&amp;#34;: 440,
        &amp;#34;width&amp;#34;: 1080,
        &amp;#34;color&amp;#34;: 4
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.stickyNote&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        0,
        0
      ],
      &amp;#34;id&amp;#34;: &amp;#34;72c465e9-7f9a-4925-b301-8a52a6a5dbee&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Sticky Note&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;conditions&amp;#34;: {
          &amp;#34;options&amp;#34;: {
            &amp;#34;caseSensitive&amp;#34;: true,
            &amp;#34;leftValue&amp;#34;: &amp;#34;&amp;#34;,
            &amp;#34;typeValidation&amp;#34;: &amp;#34;strict&amp;#34;,
            &amp;#34;version&amp;#34;: 2
          },
          &amp;#34;conditions&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;7336889b-7509-459f-a81c-d5293a043e94&amp;#34;,
              &amp;#34;leftValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all conversations&amp;#39;).item.json.currentPage }}&amp;#34;,
              &amp;#34;rightValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all conversations&amp;#39;).item.json.totalPages }}&amp;#34;,
              &amp;#34;operator&amp;#34;: {
                &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;,
                &amp;#34;operation&amp;#34;: &amp;#34;equals&amp;#34;
              }
            }
          ],
          &amp;#34;combinator&amp;#34;: &amp;#34;and&amp;#34;
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.if&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2.2,
      &amp;#34;position&amp;#34;: [
        560,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;f27df6bd-4963-43ef-9e92-b1e6cacf4978&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;If Final Conversations Page&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;1&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        60,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;90a38005-71b3-4af9-9d5c-dc33d955a7b1&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Set Page Conversations Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;={{ $(&amp;#39;List all conversations&amp;#39;).item.json.currentPage &amp;#43; 1 }}&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        720,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;6aca719c-72f6-45c5-939b-b7cfd61ac610&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Increase Conversations Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;operation&amp;#34;: &amp;#34;get&amp;#34;,
        &amp;#34;id&amp;#34;: &amp;#34;={{ $json.id }}&amp;#34;,
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        920,
        40
      ],
      &amp;#34;id&amp;#34;: &amp;#34;0244adf9-9fdd-48b5-8180-3c562d5374e1&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Get a conversation by ID&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;// Loop over input items and add a new field called &amp;#39;myNewField&amp;#39; to the JSON of each one\nfor (const item of $input.all()) {\n  item.json.myNewField = 1;\n}\n\nreturn $input.all().map(item =&amp;gt; item.json.conversation);&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        920,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;4cad4929-ed10-4e94-a882-dcb32bbc6b89&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Flatten Conversations&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;inputSource&amp;#34;: &amp;#34;passthrough&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.executeWorkflowTrigger&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1.1,
      &amp;#34;position&amp;#34;: [
        -320,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;ff4a0ae5-8983-41be-8d6c-981e1231f58e&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;When Executed by Another Workflow&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\nworkflowStaticData.conversations = [];\nreturn $input.all();&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        -140,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;5c1753cd-e3b2-44e2-b672-6b5de6db8eca&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Reset Global variable&amp;#34;
    }
  ],
  &amp;#34;connections&amp;#34;: {
    &amp;#34;List all conversations&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Merge Conversations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Merge Conversations&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;If Final Conversations Page&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Return All Conversations&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Get a conversation by ID&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;If Final Conversations Page&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Return All Conversations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ],
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Increase Conversations Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Set Page Conversations Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all conversations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Increase Conversations Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all conversations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Get a conversation by ID&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Flatten Conversations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;When Executed by Another Workflow&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Reset Global variable&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Reset Global variable&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Set Page Conversations Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    }
  },
  &amp;#34;pinData&amp;#34;: {},
  &amp;#34;meta&amp;#34;: {
    &amp;#34;instanceId&amp;#34;: &amp;#34;8bc1c2d2c1dce278cdfe696155aa34f0a2de517c041fd1624c10504d76351bb8&amp;#34;
  }
}&#39; frame=true&gt;&lt;/n8n-demo&gt;












  




  &lt;h3 id=&#34;bee-ai---fetch-all-facts&#34;&gt;Bee AI - Fetch all Facts&lt;/h3&gt;
&lt;n8n-demo workflow=&#39;{
  &amp;#34;nodes&amp;#34;: [
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;inputSource&amp;#34;: &amp;#34;passthrough&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.executeWorkflowTrigger&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1.1,
      &amp;#34;position&amp;#34;: [
        -320,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;9e3c34c7-d0c1-4a0f-9449-33239fed6b6a&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;When Executed by Another Workflow&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\nworkflowStaticData.facts = [];\nreturn $input.all();&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        -140,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;e9d0b680-0785-4806-8966-cd8ad97d8406&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Reset Global variable&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;content&amp;#34;: &amp;#34;## Facts\nUsing a loop to go through paginated results&amp;#34;,
        &amp;#34;height&amp;#34;: 440,
        &amp;#34;width&amp;#34;: 1040,
        &amp;#34;color&amp;#34;: 5
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.stickyNote&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        0,
        0
      ],
      &amp;#34;id&amp;#34;: &amp;#34;becddbbc-c028-495e-9d65-dabb35fb6cce&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Sticky Note1&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;// Loop over input items and add a new field called &amp;#39;myNewField&amp;#39; to the JSON of each one\nconst workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nconst facts = workflowStaticData.facts || [];\n\nfacts.push(...$input.first().json.facts);\n\nworkflowStaticData.facts = facts;\n\nreturn {facts};&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        420,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;456715c8-93f0-41bc-80a0-4a24694bc7ef&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Merge Facts&amp;#34;,
      &amp;#34;executeOnce&amp;#34;: true
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;={{ $(&amp;#39;List all facts&amp;#39;).item.json.currentPage &amp;#43; 1 }}&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        740,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;f89c1d43-0beb-404f-a3c2-aaa32b8336d1&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Increase Facts Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;1&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        60,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;6206b67a-a039-4513-a87c-942e70928d69&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Set Facts Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nreturn workflowStaticData.facts;&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        740,
        40
      ],
      &amp;#34;id&amp;#34;: &amp;#34;d66ad9db-c701-4cca-ab82-665549877541&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Return All Facts&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;conditions&amp;#34;: {
          &amp;#34;options&amp;#34;: {
            &amp;#34;caseSensitive&amp;#34;: true,
            &amp;#34;leftValue&amp;#34;: &amp;#34;&amp;#34;,
            &amp;#34;typeValidation&amp;#34;: &amp;#34;strict&amp;#34;,
            &amp;#34;version&amp;#34;: 2
          },
          &amp;#34;conditions&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;7336889b-7509-459f-a81c-d5293a043e94&amp;#34;,
              &amp;#34;leftValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all facts&amp;#39;).item.json.currentPage }}&amp;#34;,
              &amp;#34;rightValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all facts&amp;#39;).item.json.totalPages }}&amp;#34;,
              &amp;#34;operator&amp;#34;: {
                &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;,
                &amp;#34;operation&amp;#34;: &amp;#34;equals&amp;#34;
              }
            }
          ],
          &amp;#34;combinator&amp;#34;: &amp;#34;and&amp;#34;
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.if&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2.2,
      &amp;#34;position&amp;#34;: [
        580,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;f7d4acf9-8989-4879-b82b-3a44a141fa6c&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;If Final Facts Page&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;resource&amp;#34;: &amp;#34;facts&amp;#34;,
        &amp;#34;filter&amp;#34;: {},
        &amp;#34;pagination&amp;#34;: {
          &amp;#34;page&amp;#34;: &amp;#34;={{ $json.page }}&amp;#34;,
          &amp;#34;limit&amp;#34;: 200
        },
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        240,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;bbb7ed8b-5c25-41a1-914f-2bca85c4dc52&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;List all facts&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;resource&amp;#34;: &amp;#34;facts&amp;#34;,
        &amp;#34;operation&amp;#34;: &amp;#34;get&amp;#34;,
        &amp;#34;id&amp;#34;: &amp;#34;={{ $json.id }}&amp;#34;,
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        900,
        40
      ],
      &amp;#34;id&amp;#34;: &amp;#34;98ee9df1-f68b-4edf-bd17-1d92fa3c5d65&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Get a fact by ID&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    }
  ],
  &amp;#34;connections&amp;#34;: {
    &amp;#34;When Executed by Another Workflow&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Reset Global variable&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Reset Global variable&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Set Facts Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Merge Facts&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;If Final Facts Page&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Increase Facts Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all facts&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Set Facts Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all facts&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Return All Facts&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Get a fact by ID&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;If Final Facts Page&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Return All Facts&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ],
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Increase Facts Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;List all facts&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Merge Facts&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    }
  },
  &amp;#34;pinData&amp;#34;: {},
  &amp;#34;meta&amp;#34;: {
    &amp;#34;instanceId&amp;#34;: &amp;#34;8bc1c2d2c1dce278cdfe696155aa34f0a2de517c041fd1624c10504d76351bb8&amp;#34;
  }
}&#39; frame=true&gt;&lt;/n8n-demo&gt;












  




  &lt;h3 id=&#34;bee-ai---fetch-all-todos&#34;&gt;Bee AI - Fetch all Todos&lt;/h3&gt;
&lt;n8n-demo workflow=&#39;{
  &amp;#34;nodes&amp;#34;: [
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;inputSource&amp;#34;: &amp;#34;passthrough&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.executeWorkflowTrigger&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1.1,
      &amp;#34;position&amp;#34;: [
        -320,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;83398aa6-5779-4182-8be0-a4822e9b8724&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;When Executed by Another Workflow&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\nworkflowStaticData.todos = [];\nreturn $input.all();&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        -140,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;8b654d4c-d6b0-4535-a295-ae2c662653df&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Reset Global variable&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;content&amp;#34;: &amp;#34;## Todos\nUsing a loop to go through paginated results&amp;#34;,
        &amp;#34;height&amp;#34;: 440,
        &amp;#34;width&amp;#34;: 1020,
        &amp;#34;color&amp;#34;: 6
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.stickyNote&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        20,
        20
      ],
      &amp;#34;id&amp;#34;: &amp;#34;27500599-de26-4d1e-bd1e-6447c9f2822e&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Sticky Note2&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;1&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        60,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;d5e189ef-5eba-4a77-8386-26335a9c714f&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Set Page Todos Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;resource&amp;#34;: &amp;#34;todos&amp;#34;,
        &amp;#34;pagination&amp;#34;: {
          &amp;#34;page&amp;#34;: &amp;#34;={{ $json.page }}&amp;#34;,
          &amp;#34;limit&amp;#34;: 200
        },
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        240,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;467b3712-357f-4f39-bca1-0ca51be70062&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;List all todos&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;// Loop over input items and add a new field called &amp;#39;myNewField&amp;#39; to the JSON of each one\nconst workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nconst todos = workflowStaticData.todos || [];\n\ntodos.push(...$input.first().json.todos);\n\nworkflowStaticData.todos = todos;\n\nreturn {todos};&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        420,
        160
      ],
      &amp;#34;id&amp;#34;: &amp;#34;fc42852f-fc1d-4a43-afdb-b2d917959f33&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Merge Todos&amp;#34;,
      &amp;#34;executeOnce&amp;#34;: true
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;conditions&amp;#34;: {
          &amp;#34;options&amp;#34;: {
            &amp;#34;caseSensitive&amp;#34;: true,
            &amp;#34;leftValue&amp;#34;: &amp;#34;&amp;#34;,
            &amp;#34;typeValidation&amp;#34;: &amp;#34;strict&amp;#34;,
            &amp;#34;version&amp;#34;: 2
          },
          &amp;#34;conditions&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;7336889b-7509-459f-a81c-d5293a043e94&amp;#34;,
              &amp;#34;leftValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all todos&amp;#39;).item.json.currentPage }}&amp;#34;,
              &amp;#34;rightValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all todos&amp;#39;).item.json.totalPages }}&amp;#34;,
              &amp;#34;operator&amp;#34;: {
                &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;,
                &amp;#34;operation&amp;#34;: &amp;#34;equals&amp;#34;
              }
            }
          ],
          &amp;#34;combinator&amp;#34;: &amp;#34;and&amp;#34;
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.if&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2.2,
      &amp;#34;position&amp;#34;: [
        580,
        160
      ],
      &amp;#34;id&amp;#34;: &amp;#34;5c053d74-4685-4c96-9321-c37876a72026&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;If Final Todos Page&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;={{ $(&amp;#39;List all todos&amp;#39;).item.json.currentPage &amp;#43; 1 }}&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        740,
        240
      ],
      &amp;#34;id&amp;#34;: &amp;#34;da3ce2cc-5a53-4671-ad5b-78d916ad2c1b&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Increase Todos Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nreturn workflowStaticData.todos;&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        740,
        60
      ],
      &amp;#34;id&amp;#34;: &amp;#34;a25dab1f-2c14-45d5-a607-019c3bf26ee9&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Return All Todos&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;resource&amp;#34;: &amp;#34;todos&amp;#34;,
        &amp;#34;operation&amp;#34;: &amp;#34;get&amp;#34;,
        &amp;#34;id&amp;#34;: &amp;#34;={{ $json.id }}&amp;#34;,
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        900,
        60
      ],
      &amp;#34;id&amp;#34;: &amp;#34;787ff6ce-6bf3-4ee3-a575-49a4940ceb4f&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Get a todo by ID&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    }
  ],
  &amp;#34;connections&amp;#34;: {
    &amp;#34;When Executed by Another Workflow&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Reset Global variable&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Reset Global variable&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Set Page Todos Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Set Page Todos Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all todos&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;List all todos&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Merge Todos&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Merge Todos&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;If Final Todos Page&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;If Final Todos Page&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Return All Todos&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ],
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Increase Todos Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Increase Todos Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all todos&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Return All Todos&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Get a todo by ID&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    }
  },
  &amp;#34;pinData&amp;#34;: {},
  &amp;#34;meta&amp;#34;: {
    &amp;#34;instanceId&amp;#34;: &amp;#34;8bc1c2d2c1dce278cdfe696155aa34f0a2de517c041fd1624c10504d76351bb8&amp;#34;
  }
}&#39; frame=true&gt;&lt;/n8n-demo&gt;












  




  &lt;h3 id=&#34;bee-ai---fetch-all-locations&#34;&gt;Bee AI - Fetch all Locations&lt;/h3&gt;
&lt;n8n-demo workflow=&#39;{
  &amp;#34;nodes&amp;#34;: [
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;inputSource&amp;#34;: &amp;#34;passthrough&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.executeWorkflowTrigger&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1.1,
      &amp;#34;position&amp;#34;: [
        -320,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;d57099c7-8b5a-4a72-b2f4-cd91b3462e3a&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;When Executed by Another Workflow&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\nworkflowStaticData.locations = [];\nreturn $input.all();&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        -140,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;dd312c94-2649-4616-9326-24276d1cbd50&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Reset Global variable&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;content&amp;#34;: &amp;#34;## Locations\nUsing a loop to go through paginated results&amp;#34;,
        &amp;#34;height&amp;#34;: 440,
        &amp;#34;width&amp;#34;: 900,
        &amp;#34;color&amp;#34;: 5
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.stickyNote&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        0,
        0
      ],
      &amp;#34;id&amp;#34;: &amp;#34;bb9c651c-d2b3-4f37-8999-c538fc9bf346&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Sticky Note3&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;1&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;string&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        60,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;966893ee-5f58-4ee7-8595-f3e9fee1d5eb&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Set Locations Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;resource&amp;#34;: &amp;#34;locations&amp;#34;,
        &amp;#34;pagination&amp;#34;: {
          &amp;#34;page&amp;#34;: &amp;#34;={{ $json.page }}&amp;#34;,
          &amp;#34;limit&amp;#34;: 200
        },
        &amp;#34;requestOptions&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-bee-ai.beeai&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 1,
      &amp;#34;position&amp;#34;: [
        240,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;48749a52-7ce0-4879-9e44-93f43dc5ceb9&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;List all locations&amp;#34;,
      &amp;#34;credentials&amp;#34;: {
        &amp;#34;beeAIApi&amp;#34;: {
          &amp;#34;id&amp;#34;: &amp;#34;mOMKfymUx3xKGCvr&amp;#34;,
          &amp;#34;name&amp;#34;: &amp;#34;BeeAI account&amp;#34;
        }
      }
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;// Loop over input items and add a new field called &amp;#39;myNewField&amp;#39; to the JSON of each one\nconst workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nconst locations = workflowStaticData.locations || [];\n\nlocations.push(...$input.first().json.locations);\n\nworkflowStaticData.locations = locations;\n\nreturn {locations};&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        420,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;e91664cc-b477-4140-807b-dbfe11beb6bc&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Merge Locations&amp;#34;,
      &amp;#34;executeOnce&amp;#34;: true
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;conditions&amp;#34;: {
          &amp;#34;options&amp;#34;: {
            &amp;#34;caseSensitive&amp;#34;: true,
            &amp;#34;leftValue&amp;#34;: &amp;#34;&amp;#34;,
            &amp;#34;typeValidation&amp;#34;: &amp;#34;strict&amp;#34;,
            &amp;#34;version&amp;#34;: 2
          },
          &amp;#34;conditions&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;7336889b-7509-459f-a81c-d5293a043e94&amp;#34;,
              &amp;#34;leftValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all locations&amp;#39;).item.json.currentPage }}&amp;#34;,
              &amp;#34;rightValue&amp;#34;: &amp;#34;={{ $(&amp;#39;List all locations&amp;#39;).item.json.totalPages }}&amp;#34;,
              &amp;#34;operator&amp;#34;: {
                &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;,
                &amp;#34;operation&amp;#34;: &amp;#34;equals&amp;#34;
              }
            }
          ],
          &amp;#34;combinator&amp;#34;: &amp;#34;and&amp;#34;
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.if&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2.2,
      &amp;#34;position&amp;#34;: [
        580,
        140
      ],
      &amp;#34;id&amp;#34;: &amp;#34;81fe06dc-4ca0-4453-a5e2-a64610625473&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;If Final Locations Page&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;assignments&amp;#34;: {
          &amp;#34;assignments&amp;#34;: [
            {
              &amp;#34;id&amp;#34;: &amp;#34;6dfc0e3c-8ae4-4fb7-921a-3ccd9aefa57a&amp;#34;,
              &amp;#34;name&amp;#34;: &amp;#34;page&amp;#34;,
              &amp;#34;value&amp;#34;: &amp;#34;={{ $(&amp;#39;List all locations&amp;#39;).item.json.currentPage &amp;#43; 1 }}&amp;#34;,
              &amp;#34;type&amp;#34;: &amp;#34;number&amp;#34;
            }
          ]
        },
        &amp;#34;options&amp;#34;: {}
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.set&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 3.4,
      &amp;#34;position&amp;#34;: [
        740,
        220
      ],
      &amp;#34;id&amp;#34;: &amp;#34;6373f5ae-2c58-47c3-98aa-d46abcc6566f&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Increase Locations Page Number&amp;#34;
    },
    {
      &amp;#34;parameters&amp;#34;: {
        &amp;#34;jsCode&amp;#34;: &amp;#34;const workflowStaticData = $getWorkflowStaticData(&amp;#39;global&amp;#39;);\n\nreturn workflowStaticData.locations;&amp;#34;
      },
      &amp;#34;type&amp;#34;: &amp;#34;n8n-nodes-base.code&amp;#34;,
      &amp;#34;typeVersion&amp;#34;: 2,
      &amp;#34;position&amp;#34;: [
        740,
        40
      ],
      &amp;#34;id&amp;#34;: &amp;#34;888ec972-a94b-4d9f-8332-7fc535d04932&amp;#34;,
      &amp;#34;name&amp;#34;: &amp;#34;Return All Locations&amp;#34;
    }
  ],
  &amp;#34;connections&amp;#34;: {
    &amp;#34;When Executed by Another Workflow&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Reset Global variable&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Reset Global variable&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Set Locations Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Set Locations Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all locations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;List all locations&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Merge Locations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Merge Locations&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;If Final Locations Page&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;If Final Locations Page&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Return All Locations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ],
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;Increase Locations Page Number&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    },
    &amp;#34;Increase Locations Page Number&amp;#34;: {
      &amp;#34;main&amp;#34;: [
        [
          {
            &amp;#34;node&amp;#34;: &amp;#34;List all locations&amp;#34;,
            &amp;#34;type&amp;#34;: &amp;#34;main&amp;#34;,
            &amp;#34;index&amp;#34;: 0
          }
        ]
      ]
    }
  },
  &amp;#34;pinData&amp;#34;: {},
  &amp;#34;meta&amp;#34;: {
    &amp;#34;templateCredsSetupCompleted&amp;#34;: true,
    &amp;#34;instanceId&amp;#34;: &amp;#34;8bc1c2d2c1dce278cdfe696155aa34f0a2de517c041fd1624c10504d76351bb8&amp;#34;
  }
}&#39; frame=true&gt;&lt;/n8n-demo&gt;





&lt;h2 id=&#34;workflows&#34;&gt;Workflows&lt;/h2&gt;







  




  &lt;h3 id=&#34;bee-ai---backup-v2&#34;&gt;Bee AI - Backup v2&lt;/h3&gt;
&lt;p&gt;Uses the &lt;code&gt;Fetch all x&lt;/code&gt; workflows to get all the data, then insert it into a MongoDB database anf a json file in Google Drive.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Bee AI n8n nodes</title>
      <link>https://4sh.dev/posts/2025/n8n-nodes-bee-ai/</link>
      <pubDate>Wed, 25 Jun 2025 00:00:00 +0000</pubDate>
      <guid>https://4sh.dev/posts/2025/n8n-nodes-bee-ai/</guid>
      <description>&lt;p&gt;I recently developed a custom n8n node package that connects Bee AI with the n8n workflow automation platform, opening up new possibilities for automating personal AI data.&lt;/p&gt;
&lt;h2 id=&#34;what-is-bee-ai&#34;&gt;What is Bee AI?&lt;/h2&gt;
&lt;p&gt;Bee AI is a wearable personal AI device that sits quietly in the background, capturing and processing your daily interactions. Unlike traditional smart assistants that require explicit activation, Bee continuously learns from your conversations, tasks, and locations, transforming these moments into actionable insights, summaries, and reminders.&lt;/p&gt;</description>
    </item>
    <item>
      <title>RAG Agents with LangChain and LangGraph</title>
      <link>https://4sh.dev/posts/2024/an-opinionated-rag-agent/</link>
      <pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate>
      <guid>https://4sh.dev/posts/2024/an-opinionated-rag-agent/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://arxiv.org/abs/2310.11511&#34;&gt;Self-RAG&lt;/a&gt; (Self-Reflective Retrieval-Augmented Generation) is a framework that
combines the benefits of
retrieval-augmented generation (RAG) with self-reflection, allowing large language models (LLMs) to adaptively retrieve
passages on-demand and generate more accurate responses.&lt;/p&gt;
&lt;p&gt;Langgraph recently published
a &lt;a href=&#34;https://langchain-ai.github.io/langgraph/tutorials/rag/langgraph_self_rag_local/&#34;&gt;blog post&lt;/a&gt; on &lt;em&gt;Self-RAG&lt;/em&gt; with their
own implementation.&lt;/p&gt;
&lt;p&gt;I really like the idea of validating the retrieved information. In that past I have noticed that, while vector databases
will return documents that usually match the input query string, some may contain irrelevant content.
Having the ability to validate and correct this is a great feature for any RAG setup.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
