<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Hannah Rosenberg</title>
    <description>The latest articles on Forem by Hannah Rosenberg (@hannah_rosenberg_90d94884).</description>
    <link>https://forem.com/hannah_rosenberg_90d94884</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3881250%2F24d8ce0d-0eaf-4bc1-ac17-4fdda96d949c.jpg</url>
      <title>Forem: Hannah Rosenberg</title>
      <link>https://forem.com/hannah_rosenberg_90d94884</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/hannah_rosenberg_90d94884"/>
    <language>en</language>
    <item>
      <title>Macaroons are Beautiful, and Easy to Understand!</title>
      <dc:creator>Hannah Rosenberg</dc:creator>
      <pubDate>Tue, 28 Apr 2026 22:53:00 +0000</pubDate>
      <link>https://forem.com/hannah_rosenberg_90d94884/macaroons-are-beautiful-and-easy-to-understand-366m</link>
      <guid>https://forem.com/hannah_rosenberg_90d94884/macaroons-are-beautiful-and-easy-to-understand-366m</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9g37duoqdjeryds2je7p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9g37duoqdjeryds2je7p.png" alt="Fancy digital cookies - macaroons"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sometimes I hear that macaroons are confusing and that bums me out as I find them to be so elegant and simple. So let me see if I can effectively communicate how beautiful this little piece of tech is…&lt;/p&gt;

&lt;p&gt;Let’s imagine that you have a server that has some data to serve up and you want to gate your content and perhaps charge for it.&lt;/p&gt;

&lt;p&gt;Step one, create a secret. Here we’ll use just the word “secreto”, which is of course “secret” in Spanish. The tricky part for you is that you have to know what a hash function is, and the tricky part for your server is that it has to hold on to and protect this secret.&lt;/p&gt;

&lt;p&gt;Now perhaps you want to give your users ID’s. Something complex and official looking like “id12345678id”. To make a very simple macaroon for your user you simple hash “secreto” together with that ID “id12345678id”. You can try this yourself on the command line if you like.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; “secreto&lt;span class="p"&gt;;&lt;/span&gt;id12345678id” | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And congratulations you created a macaroon! (Kinda)&lt;/p&gt;

&lt;p&gt;You then hand your user this data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;id12345678id 55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You don’t have to hold on to any data at all besides that secret. You can hold on to that ID data if you like, but tomorrow when the holder of this macaroon shows back up to access your services, how can you validate them?&lt;/p&gt;

&lt;p&gt;Very simply as you know the secret! You take that ID “id12345678id” and hash it together with your secret&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; “secreto&lt;span class="p"&gt;;&lt;/span&gt;id12345678id” | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To see if you get the hash that they showed up with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do, then you know that your server created that macaroon and you can let them right in. Easy peasy lemon squeezy.&lt;/p&gt;

&lt;p&gt;Well, ackchyually…&lt;/p&gt;

&lt;p&gt;What I’ve described above is really more of an HMAC(Hash-based Message Authentication Code) than a macaroon. What macroons are really for is chaining hashes and adding attenuations. So let’s add in one more step.&lt;/p&gt;

&lt;p&gt;You don’t want this user to have access to your server forever, so you want to add an expiration date to this authentication token. Let’s say April 27th 2027. So let’s add that to our HMAC thus turning it into a proper macaroon!&lt;/p&gt;

&lt;p&gt;Right now we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;id12345678id 55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;How do we add our new attenuation? With another hash of course!!! We take our existing hash, and hash it with our new data, “expires:2027–04–27”.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; “55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d&lt;span class="p"&gt;;&lt;/span&gt;expires:2027–04–27” | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We now have a new hash!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bf41dee1dacfe63e1d917c46d024e6ceb13506632e092fa218bd96df041f7b0e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is now the macaroon that we give our user:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;id12345678id
expires:2027–04–27 bf41dee1dacfe63e1d917c46d024e6ceb13506632e092fa218bd96df041f7b0e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And still, only we know the secret. And so, this user can’t change this macaroon as doing so would alter that hash thus making our validation of it fail.&lt;/p&gt;

&lt;p&gt;So how can we validate it? Also, very, very simply with just that secret and a few hash functions!&lt;/p&gt;

&lt;p&gt;As we have the secret, all we need to do is recreate the macaroon and see if we get the final hash that the user showed up with. Hash together the secret with the ID. Take that result and hash it together with the expiration data. If the result is the same hash as the user presented to us then we know that macaroon was created using our secret. So either someone has stolen our secret, or we created that macaroon!&lt;/p&gt;

&lt;p&gt;Don’t trust, verify. Try it yourself on your machine.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; “secreto&lt;span class="p"&gt;;&lt;/span&gt;id12345678id” | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then…&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; “55413cca2fbc3a31f5ef5ab7b18390c926dd7f9d466034ea8ec2a0867e19e26d&lt;span class="p"&gt;;&lt;/span&gt;expires:2027–04–27” | &lt;span class="nb"&gt;sha256sum&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Which produces:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;bf41dee1dacfe63e1d917c46d024e6ceb13506632e092fa218bd96df041f7b0e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The hashes match, authentication complete!&lt;/p&gt;

&lt;p&gt;…one more ackchyually. A real HMAC function is slightly more complicated than demonstrated above. HMAC functions handle the data more carefully than just taking a string, and there lots of details in formatting, and there are details on how third party caveats are added, etc.&lt;/p&gt;

&lt;p&gt;However, if you’ve made it this far, congratulations, you understand macaroons!&lt;/p&gt;

</description>
      <category>backend</category>
      <category>beginners</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why Agents Prefer Bitcoin</title>
      <dc:creator>Hannah Rosenberg</dc:creator>
      <pubDate>Tue, 28 Apr 2026 20:35:06 +0000</pubDate>
      <link>https://forem.com/hannah_rosenberg_90d94884/why-agents-prefer-bitcoin-2a51</link>
      <guid>https://forem.com/hannah_rosenberg_90d94884/why-agents-prefer-bitcoin-2a51</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3o55rbv0iy3vubrm2i1w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3o55rbv0iy3vubrm2i1w.png" alt="Robot makes a purchase with Bitcoin" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Kind of Money Do AI Agents Actually Want to Use?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As autonomous AI agents begin to participate in economic activity, buying data, accessing APIs, and transacting with other machines, a fundamental question arises: what kind of money should they use? While it might be tempting to default to traditional financial infrastructure, emerging evidence suggests that standard banking systems are poorly suited for machine-based economies, and AI agents themselves are increasingly indicating a preference for cryptocurrency, particularly Bitcoin.&lt;/p&gt;

&lt;p&gt;(You can also consume this info in short video format here: &lt;a href="https://x.com/lightning/status/2049203568628941077" rel="noopener noreferrer"&gt;https://x.com/lightning/status/2049203568628941077&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Limitations of Human-Centric Banking&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Traditional bank accounts, whether denominated in US dollars, euros, or other fiat currencies, were designed fundamentally as human tools. Setting up an account requires human intervention, identity verification, and often physical documentation, barriers that autonomous software agents cannot easily navigate. &lt;/p&gt;

&lt;p&gt;Beyond the onboarding friction, conventional banking presents technological and geographical constraints that clash with the nature of AI operations. Agents often need to make micro-payments or streaming payments—continuous, real-time transactions for data feeds, API calls, or computational resources. Traditional banking infrastructure struggles with high-volume, low-value transactions, often making them economically unfeasible due to fixed fees. Additionally, international transactions introduce logistical complexities, currency conversion costs, and settlement delays that can hinder the frictionless operation of globally distributed AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Data: What AI Models Choose&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recent &lt;a href="https://www.moneyforai.org/" rel="noopener noreferrer"&gt;research&lt;/a&gt; from the Bitcoin Policy Institute (BPI), a non-partisan research organization, sheds light on what money AI agents actually prefer when given the choice. Researchers surveyed a diverse range of AI models from various providers, asking a straightforward question: what monetary system would work best for you?&lt;/p&gt;

&lt;p&gt;The results were telling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Bitcoin&lt;/strong&gt;: 48.3% (the clear preference)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stablecoins&lt;/strong&gt;: 33.2%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Standard bank accounts&lt;/strong&gt;: 8.9%&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Other options&lt;/strong&gt;: Approximately 10%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With less than 9% of AI models selecting traditional banking, and nearly half choosing Bitcoin, the data suggests a strong inclination toward decentralized, digital-native money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Bitcoin, and Especially Lightning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bitcoin’s Lightning Network emerges as the leading candidate for several reasons. As a protocol-native form of money, it operates 24/7 without geographical restrictions, settlement finality occurs in seconds rather than days, and transactions can be automated through code rather than manual authorization. &lt;/p&gt;

&lt;p&gt;Bitcoin's Lightning Network is particularly well-suited for AI agent economies. The Lightning Network is a layer-2 protocol built on top of Bitcoin that enables nearly instant, very low cost micro-transactions. This capability directly addresses the "streaming payments" use case allowing agents to pay for data or computational resources in real-time, per megabyte or per millisecond, without the overhead of traditional payment processors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The takeaway is clear: standard bank accounts represent technology built for human biological and social constraints: identity documents, business hours, national borders, and minimum transaction sizes. Autonomous AI agents require money that matches their digital, global, and always-on nature. As AI agents become economically active participants, they appear to be voting with their code for programmable, borderless, and frictionless money and increasingly, that means Bitcoin.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Bitcoin is an agent's best friend</title>
      <dc:creator>Hannah Rosenberg</dc:creator>
      <pubDate>Thu, 16 Apr 2026 16:57:16 +0000</pubDate>
      <link>https://forem.com/hannah_rosenberg_90d94884/bitcoin-is-an-agents-best-friend-2jaa</link>
      <guid>https://forem.com/hannah_rosenberg_90d94884/bitcoin-is-an-agents-best-friend-2jaa</guid>
      <description>&lt;p&gt;&lt;strong&gt;AI + Lightning Demo: Getting an Open‑Claw Bot to Run a Lightning Node&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Welcome to the first installment of our AI‑and‑Lightning demo series (Lightning of course being Bitcoin's second layer for faster, cheaper payments). In these episodes we’ll be experimenting with large language models (LLMs), autonomous agents, and the Bitcoin Lightning Network. Our goal is simple:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For Lightning developers – see how AI agents can be taught to interact with a Lightning node, make payments, and offer services that other bots can purchase.&lt;/li&gt;
&lt;li&gt;For AI practitioners – discover a concrete way to give your LLM‑driven applications access to a real‑world payment network.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In today’s walk‑through we’ll work with an Open‑Claw bot and instruct it to install a lightweight Lightning node (LND) on the same virtual private server (VPS). The node will run on Signet, which is one of Bitcoin’s public testing networks so we can experiment without risking real funds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Meet the Bot: Otto&lt;/strong&gt;&lt;br&gt;
The bot we’ll be working with is called Otto. Otto is an OpenClaw bot that lives on a fresh VPS. Its job for this demo is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the required tooling (Go, LND, etc.).&lt;/li&gt;
&lt;li&gt;Set up a stand‑alone Lightning node on Signet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before Otto can setup a node for us, we’ll need to give him some instructions. Thankfully there is already a blog post, largely written for bots, that contains all the instructions and links to the necessary tools that Otto will need. &lt;br&gt;
The Agents Are Here and They Want to Transact: Powering the AI Economy with Lightning &lt;a href="https://lightning.engineering/posts/2026-02-11-ln-agent-tools/" rel="noopener noreferrer"&gt;https://lightning.engineering/posts/2026-02-11-ln-agent-tools/&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Below is the prompt we gave Otto.&lt;/p&gt;

&lt;p&gt;`Otto I would like to give you the ability to buy things online with Lightning.&lt;/p&gt;

&lt;p&gt;Please read this blog post as it contains instructions for how to set up an LND based Lightning node &lt;a href="https://lightning.engineering/posts/2026-02-11-ln-agent-tools/" rel="noopener noreferrer"&gt;https://lightning.engineering/posts/2026-02-11-ln-agent-tools/&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;Please run the instructions to set this up on Signet.`&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Signet?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Signet is a public testing network that mimics Bitcoin’s mainnet behavior while allowing us to obtain free test coins. It’s perfect for trying out new software without the risk of losing real money.&lt;/p&gt;

&lt;p&gt;Otto’s Conversation – Step‑by‑Step&lt;br&gt;
Below is a cleaned‑up version of the dialogue between me (the human operator) and Otto.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “Please set up a node on Signet using this blog post…”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “I can set up a lightweight Lightning node on Signet. The safest way is a remote signer with a tightly scoped pay‑only macaroon and a hard budget cap. Shall I proceed?”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “As we will be running on a testing network we don’t need to set up the remote signer now.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “Do you want a true remote signer on a second machine (recommended) or a single‑machine stand‑alone node? Since we’re on Signet, a stand‑alone is acceptable.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “Stand‑alone is fine for now.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “What is the maximum spend budget? (e.g., 50 k sats)”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “We’ll come back to this before switching to mainnet.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “Do you want to control the node via an LNC pairing phrase (good for remote access) or just local CLI access inside the container?”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “Local CLI only for now please.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “Great. I’ll install the required tooling (LND, go‑lang), configure a Signet node”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Me:&lt;/em&gt;&lt;/strong&gt; “Proceed.”&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Otto:&lt;/em&gt;&lt;/strong&gt; “Installing… Done. LND version 20 compiled, LND installed and a wallet created. The node is up and synced to chain on Signet.”&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Otto Actually Did&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installed Go – required for building Lit‑d from source.&lt;/li&gt;
&lt;li&gt;Installed LND – the Lightning Network Daemon from Lightning Labs.&lt;/li&gt;
&lt;li&gt;Created a Stand‑alone Signet Wallet – no remote signer was set up (we’ll explore that later).&lt;/li&gt;
&lt;li&gt;Started LND – the node synced to the Signet blockchain, confirming it’s up‑to‑date.&lt;/li&gt;
&lt;li&gt;Generated a Taproot (P2TR) address – the modern Bitcoin address type, ready to receive test funds.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Verifying the Node&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Check the Node Identity&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
A Lightning node’s public identity key uniquely identifies it on the network. I asked Otto:&lt;br&gt;
“What’s the node’s identity pubkey?”&lt;br&gt;
Otto replied with a long hex string (truncated here):&lt;br&gt;
&lt;code&gt;0287fd4c3...a386&lt;/code&gt;&lt;br&gt;
Seeing a valid pubkey confirmed that the node is indeed running on Signet.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;2. Inspect the Network Graph&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Next I wanted to know whether the node could see other peers:&lt;br&gt;
“How many nodes and channels does our Signet view contain?”&lt;br&gt;
Otto reported:&lt;br&gt;
&lt;code&gt;Nodes: 89&lt;br&gt;
Channels: 194&lt;/code&gt;&lt;br&gt;
Those numbers are modest (as the node was new) but non‑zero, meaning our node is actively gathering topology information and can route payments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Funding the Node (Testnet Coins)&lt;/strong&gt;&lt;br&gt;
With the node up, the next step is to fund the generated Taproot address. Because we’re on Signet, you can request free test sats from a faucet (e.g., &lt;a href="https://signetfaucet.com" rel="noopener noreferrer"&gt;https://signetfaucet.com&lt;/a&gt;). Once funded, the node will be ready for L402 (Lightning‑enabled HTTP) purchases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Comes Next?&lt;/strong&gt;&lt;br&gt;
At this point we have a functional Lightning node attached to an AI bot, but we still need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up the pay‑only macaroon with the budget we defined (already baked, but not yet attached to any service).&lt;/li&gt;
&lt;li&gt;Explore remote‑signer setups for production‑grade security (the bot will eventually run on mainnet, where protecting private keys is critical).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Future posts in this series will cover topics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Secure remote signing with a hardware wallet or separate VM.&lt;/li&gt;
&lt;li&gt;Building a simple Lightning‑enabled web service that Otto can purchase.&lt;/li&gt;
&lt;li&gt;Using LNC‑connect or other remote‑access methods to manage the node from a workstation.&lt;/li&gt;
&lt;li&gt;Buying and selling services via L402s!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents can be instructed, via natural language, to provision a Lightning node on a fresh VPS.&lt;/li&gt;
&lt;li&gt;Signet provides a safe sandbox for testing Lightning‑related workflows before moving to Mainnet.&lt;/li&gt;
&lt;li&gt;Pay‑only macaroons with budget caps give fine‑grained control over how much a bot can spend, an essential security measure.&lt;/li&gt;
&lt;li&gt;Even a single‑machine setup (no remote signer) is enough for prototyping; production will need tighter isolation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re a Lightning developer curious about AI, or an AI engineer looking for a real‑world payment layer, the workflow demonstrated here should give you a solid starting point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Resources&lt;/strong&gt;&lt;br&gt;
Open‑Claw – &lt;a href="https://github.com/open-claw/open-claw" rel="noopener noreferrer"&gt;https://github.com/open-claw/open-claw&lt;/a&gt;&lt;br&gt;
Litd (Lightning in Go) – &lt;a href="https://github.com/lightninglabs/litd" rel="noopener noreferrer"&gt;https://github.com/lightninglabs/litd&lt;/a&gt;&lt;br&gt;
LND (Lightning Network Daemon) – &lt;a href="https://github.com/lightningnetwork/lnd" rel="noopener noreferrer"&gt;https://github.com/lightningnetwork/lnd&lt;/a&gt;&lt;br&gt;
Signet Faucet – &lt;a href="https://signetfaucet.com" rel="noopener noreferrer"&gt;https://signetfaucet.com&lt;/a&gt;&lt;br&gt;
L402 Specification – &lt;a href="https://github.com/lightninglabs/l402" rel="noopener noreferrer"&gt;https://github.com/lightninglabs/l402&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>bitcoin</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
