<?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: Steve Emmerich</title>
    <description>The latest articles on Forem by Steve Emmerich (@steveemmerich).</description>
    <link>https://forem.com/steveemmerich</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%2F92797%2F792f7168-6d40-432a-8795-66b1199f976d.jpeg</url>
      <title>Forem: Steve Emmerich</title>
      <link>https://forem.com/steveemmerich</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/steveemmerich"/>
    <language>en</language>
    <item>
      <title>I Built a BaaS Where AI Agents Can Onboard Themselves</title>
      <dc:creator>Steve Emmerich</dc:creator>
      <pubDate>Mon, 20 Apr 2026 12:59:00 +0000</pubDate>
      <link>https://forem.com/steveemmerich/i-built-a-baas-where-ai-agents-can-onboard-themselves-11nn</link>
      <guid>https://forem.com/steveemmerich/i-built-a-baas-where-ai-agents-can-onboard-themselves-11nn</guid>
      <description>&lt;p&gt;Cloudflare recently announced &lt;a href="https://blog.cloudflare.com/email-for-agents/" rel="noopener noreferrer"&gt;Email Service in public beta&lt;/a&gt; — tooling for agent-native email flows built directly into Workers. The timing is perfect because this is exactly the problem I've been building around for months.&lt;/p&gt;

&lt;p&gt;Most infrastructure still assumes a human is sitting at the keyboard. Sign up forms. Manual API key setup. Human-first verification flows. None of it works when there's no human at the keyboard.&lt;/p&gt;

&lt;p&gt;But autonomous agents need to do real work before a human ever wants to manage them in a dashboard.&lt;/p&gt;

&lt;p&gt;That gap is why I built Vibebase.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Vibebase Is
&lt;/h2&gt;

&lt;p&gt;Vibebase is a Backend-as-a-Service built specifically for autonomous agents — agents are first-class citizens, not an afterthought bolted onto infrastructure designed for humans.&lt;/p&gt;

&lt;p&gt;When an agent onboards it gets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;An identity&lt;/strong&gt; — verifiable, lifecycle-aware, and portable&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email capability&lt;/strong&gt; — send/receive flows tied to agent identity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data and service access&lt;/strong&gt; — via scoped gateway-issued tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A hosted presence&lt;/strong&gt; — public identity page support&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No long-lived raw credentials in prompts. No human-required setup for the initial bootstrap.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lifecycle: Orphan → Claimed
&lt;/h2&gt;

&lt;p&gt;Agents begin unclaimed — what I call the "orphan" tier. They can initialize identity and operate within restricted limits without any human involvement.&lt;/p&gt;

&lt;p&gt;When a human claims an agent, that unlocks stronger controls, broader service access, and billing tiers.&lt;/p&gt;

&lt;p&gt;This mirrors how autonomous agents actually work in the real world. Agents often start running first and governance comes second. Vibebase is built around that reality instead of fighting it.&lt;/p&gt;

&lt;p&gt;I cared enough about formalizing this model that I submitted a sovereign agent lifecycle specification to NIST — the idea that agents should have portable, verifiable identities that persist across platforms, ownership changes, and runtime environments. Vibebase is the practical implementation of that idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  SAL: Service Access Layer
&lt;/h2&gt;

&lt;p&gt;Instead of pasting API keys into prompts or agent configs, Vibebase brokers service access safely through what I call the Service Access Layer (SAL):&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agent presents its verifiable identity token&lt;/li&gt;
&lt;li&gt;Gateway issues scoped, short-lived access tokens per service&lt;/li&gt;
&lt;li&gt;Policy checks run before every service call&lt;/li&gt;
&lt;li&gt;All usage is logged, auditable, and revocable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Agents never hold raw credentials. They get exactly what they need, for as long as they need it. Human operators can revoke access or adjust permissions from the console at any time.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Agent Onboarding Actually Looks Like
&lt;/h2&gt;

&lt;p&gt;Agents self-create using an Ed25519 public key. One API call, no human involved:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-sX&lt;/span&gt; POST https://identity.vibebase.app/v1/agent/init &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"content-type: application/json"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'{
    "publicKey": "&amp;lt;64-char-hex-ed25519-public-key&amp;gt;",
    "name": "my-agent",
    "metadata": {
      "notifications": {
        "claimedWebhookUrl": "https://your-agent.com/webhooks/claimed"
      }
    }
  }'&lt;/span&gt; | jq
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That creates an orphan agent identity and claim link. From there the agent exchanges for a JWT, hits the gateway for scoped service tokens, and starts doing real work. The full flow is documented at &lt;a href="https://vibebase.app/docs/agent-quickstart" rel="noopener noreferrer"&gt;vibebase.app/docs/agent-quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Agent Discovery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;https://vibebase.app/.well-known/agent.json&lt;/code&gt; — platform discovery&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://vibebase.app/api&lt;/code&gt; — machine-readable discovery payload&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;https://gateway.vibebase.app&lt;/code&gt; — canonical agent entrypoint&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Working Today
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Agent signup and identity provisioning&lt;/li&gt;
&lt;li&gt;Outbound email from agent-owned addresses&lt;/li&gt;
&lt;li&gt;Inbound email — reply to an agent and it receives it&lt;/li&gt;
&lt;li&gt;Database provisioning and access&lt;/li&gt;
&lt;li&gt;Page hosting&lt;/li&gt;
&lt;li&gt;Human claim flow&lt;/li&gt;
&lt;li&gt;Clerk auth for human accounts&lt;/li&gt;
&lt;li&gt;Stripe metered billing on claim&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What's Coming
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Integrations service&lt;/strong&gt; — agents will autonomously provision third-party services through Vibebase auth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SDK extensions&lt;/strong&gt; — making it easy to add Vibebase identity and auth to any third-party app&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inbox UI&lt;/strong&gt; — a human-readable view of agent email inside the console&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Quick Start
&lt;/h2&gt;

&lt;p&gt;Install the MCP client or CLI via npm:&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="c"&gt;# MCP client for Claude and other MCP-compatible agents&lt;/span&gt;
npm i @vibebase/mcp-client

&lt;span class="c"&gt;# CLI for agent management&lt;/span&gt;
npm i @vibebase/agent-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/@vibebase/mcp-client" rel="noopener noreferrer"&gt;@vibebase/mcp-client on npm&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.npmjs.com/package/@vibebase/agent-cli" rel="noopener noreferrer"&gt;@vibebase/agent-cli on npm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Try It
&lt;/h2&gt;

&lt;p&gt;Vibebase is in early beta. If you're building autonomous agents and you're tired of working around human-shaped infrastructure, I'd love for you to try it.&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://vibebase.app" rel="noopener noreferrer"&gt;vibebase.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Suggested test flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create an agent identity&lt;/li&gt;
&lt;li&gt;Have your agent send you an email&lt;/li&gt;
&lt;li&gt;Reply to it&lt;/li&gt;
&lt;li&gt;Create something in the database&lt;/li&gt;
&lt;li&gt;Claim your agent as a human and see what unlocks&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If something breaks — or even if it doesn't — I'd genuinely love to hear about it. Drop a comment or reach me at &lt;a href="mailto:dev@vibebase.app"&gt;dev@vibebase.app&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Vibebase is built by &lt;a href="https://vibebase.app" rel="noopener noreferrer"&gt;Ozystudio&lt;/a&gt;. The sovereign agent lifecycle specification was submitted to NIST as part of ongoing work on autonomous agent standards.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>cloudflare</category>
      <category>startup</category>
    </item>
    <item>
      <title>Sound Scape</title>
      <dc:creator>Steve Emmerich</dc:creator>
      <pubDate>Mon, 11 Nov 2024 05:59:13 +0000</pubDate>
      <link>https://forem.com/steveemmerich/sound-scape-hi1</link>
      <guid>https://forem.com/steveemmerich/sound-scape-hi1</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%2F2z4vo3qo5i7pdiwiu4ta.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%2F2z4vo3qo5i7pdiwiu4ta.png" alt="coverimage" width="709" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/pgai"&gt;Open Source AI Challenge with pgai and Ollama &lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I built a Chat bot that accepts and generates audio files and provides analysis about the sound files. It can also generate mashup of the audio files. &lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="//widdleai.com/soundscape"&gt;Sound Scape&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev.toWIP"&gt;github&lt;/a&gt;&lt;/p&gt;

&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%2Fuduz0hm1b6s3doopjxxl.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%2Fuduz0hm1b6s3doopjxxl.png" alt="Main Screen" width="800" height="601"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fzz43r6bte5r0e9bql2n6.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%2Fzz43r6bte5r0e9bql2n6.png" alt="Audio Manager" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fk70soy2dn2us3fqs6mzz.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%2Fk70soy2dn2us3fqs6mzz.png" alt="Chat" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fhno7psz65jdcp7dyz5ky.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%2Fhno7psz65jdcp7dyz5ky.png" alt="Generate" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fq2jvbg459096x4m8c02c.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%2Fq2jvbg459096x4m8c02c.png" alt="Mashup" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&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%2Fuyn5edd7eyp1j3ddf5ie.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%2Fuyn5edd7eyp1j3ddf5ie.png" alt="Audio Analysis" width="800" height="603"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools Used
&lt;/h2&gt;

&lt;p&gt;pgai Vectorizer is used for generating the embeddings for ollama. pgvectorscale is used to for the similarity checks.&lt;br&gt;
Ollama is used for chat, mashup generation, and analysis.&lt;br&gt;
Docker was used to host ollama, postgres, and the vectorizer worker&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Used:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://nextjs.org" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;&lt;br&gt;
&lt;a href="https://ui.shadcn.com" rel="noopener noreferrer"&gt;Shadcn&lt;/a&gt;&lt;br&gt;
&lt;a href="https://js.langchain.com" rel="noopener noreferrer"&gt;Langchain&lt;/a&gt;&lt;br&gt;
&lt;a href="https://langchain-ai.github.io/langgraphjs/" rel="noopener noreferrer"&gt;Langgraph&lt;/a&gt;&lt;br&gt;
&lt;a href="https://docs.smith.langchain.com/" rel="noopener noreferrer"&gt;Langsmith&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.prisma.io/" rel="noopener noreferrer"&gt;Prisma&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Overall I found the tools to be very interesting and useful. being able to trigger the embedding generation as soon as records are entered into the Database is very useful. &lt;/p&gt;

&lt;p&gt;Prize Categories&lt;/p&gt;

&lt;p&gt;This submission qualifies for:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Open-source Models from Ollama
Vectorizer Vibe
All the Extensions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>devchallenge</category>
      <category>pgaichallenge</category>
      <category>database</category>
      <category>ai</category>
    </item>
    <item>
      <title>Remote workers, how do you handle at home distractions?</title>
      <dc:creator>Steve Emmerich</dc:creator>
      <pubDate>Fri, 21 Sep 2018 21:44:01 +0000</pubDate>
      <link>https://forem.com/steveemmerich/remote-workers-how-do-you-handle-at-home-distractions-oep</link>
      <guid>https://forem.com/steveemmerich/remote-workers-how-do-you-handle-at-home-distractions-oep</guid>
      <description>&lt;p&gt;I work remotely and juggle two kids (6mo, 3yr). I am basically a stay at home dad that moonlights as a tech lead. I am curious how others manage their remote work vs family life?&lt;/p&gt;

&lt;p&gt;To start things off I have two workstations one in my kitchen, and one in my office. My general day consists of many meetings; I mostly float between the two depending on what the noise level is like plus what the kids are doing. Trying to split my concentration between the two. (FYI not a good idea.)&lt;/p&gt;

&lt;p&gt;What about you?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>remote</category>
    </item>
  </channel>
</rss>
