<?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>DEV Community: douzatan</title>
    <description>The latest articles on DEV Community by douzatan (@douzatan).</description>
    <link>https://dev.to/douzatan</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3500763%2Fd477d43f-7280-40d1-b783-a04e4503cb67.jpeg</url>
      <title>DEV Community: douzatan</title>
      <link>https://dev.to/douzatan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/douzatan"/>
    <language>en</language>
    <item>
      <title>We route our agents across three model tiers. Here's the logic</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Fri, 17 Jul 2026 15:36:58 +0000</pubDate>
      <link>https://dev.to/douzatan/we-route-our-agents-across-three-model-tiers-heres-the-logic-c9n</link>
      <guid>https://dev.to/douzatan/we-route-our-agents-across-three-model-tiers-heres-the-logic-c9n</guid>
      <description>&lt;p&gt;We rebuilt our agent stack around model routing about two months ago. This is what we learned, including the part where our first version was worse than doing nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup that broke
&lt;/h2&gt;

&lt;p&gt;Our research agent reads vendor documents, extracts claims, checks them against each other, and drafts a recommendation for a human to sign. Forty or so memos a month.&lt;/p&gt;

&lt;p&gt;We built it on one frontier model because that's what was in the tutorial we started from. Every step, same model. It worked well enough that nobody looked at it for a quarter, which is exactly how these things go.&lt;/p&gt;

&lt;p&gt;Then we looked at the bill.&lt;/p&gt;

&lt;p&gt;The distribution was the problem. About 4% of our calls were doing something a cheap model would get wrong. The other 96% were classification, extraction, formatting, and retries, where a cheap model gets the same answer. We had been paying a premium on all of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt one: a global downgrade (don't do this)
&lt;/h2&gt;

&lt;p&gt;Our first fix was to swap the whole pipeline to a cheaper tier and see what broke.&lt;/p&gt;

&lt;p&gt;Plenty broke, but not where we expected. Classification and extraction were fine. Formatting was fine. What fell apart was the step where the agent had to look at two documents that disagreed and decide which one to trust. The cheap model didn't fail loudly there. It picked one, wrote a confident sentence about it, and moved on. The error flowed straight into the memo.&lt;/p&gt;

&lt;p&gt;That's the lesson that reorganized how we think about this. Cheap models don't fail by producing garbage. They fail by producing something plausible that survives review. On a classification task you notice immediately. On a judgment task you notice when a client does.&lt;/p&gt;

&lt;h2&gt;
  
  
  Attempt two: route by blast radius
&lt;/h2&gt;

&lt;p&gt;The question we now ask at every step is not "is this hard." It's:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If this step returns a mediocre answer, how far does it travel before someone catches it?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That reframing did more for us than any model comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blast radius of one row&lt;/strong&gt; goes to the cheapest tier that passes. A misclassified document gets caught by the next step or by a human scanning a list. Wrong is cheap here. This is most of the pipeline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blast radius of a section&lt;/strong&gt; goes to a balanced tier. Structuring evidence, drafting a paragraph, ordinary summarization. Errors are visible on read-through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blast radius of the whole deliverable&lt;/strong&gt; goes to the premium tier. For us that's exactly two steps: reconciling sources that contradict each other, and the final pass before a human signs. Under 5% of calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Blast radius beyond the deliverable&lt;/strong&gt; goes to a human. Anything touching a customer, money, or production.&lt;/p&gt;

&lt;p&gt;Our spend dropped by a little over half. Memo quality went up slightly, which I attribute mostly to the fact that writing this table forced us to articulate what each step was for. Half the win had nothing to do with models.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the tiers actually differ
&lt;/h2&gt;

&lt;p&gt;Worth understanding why this works rather than cargo-culting the table.&lt;/p&gt;

&lt;p&gt;When Anthropic launched Claude Fable 5 it made a claim that reads like marketing but functions as engineering guidance: the model's lead grows as tasks become longer and more complex. Anthropic says it's a Mythos-class model made safe for general use whose capabilities exceed any model the company has made generally available, and that it stays focused across millions of tokens on long-running tasks while improving its output using its own notes. Anthropic says Stripe used it to complete a codebase-wide migration in a 50-million-line Ruby codebase in a day, against more than two months of manual work.&lt;/p&gt;

&lt;p&gt;The advantage is conditional on difficulty. On a short easy call the tiers converge and you're paying for a margin you can't measure. On a long tangled one the gap is your product.&lt;/p&gt;

&lt;p&gt;That's the whole justification for routing. If the advantage were flat across task types, routing would be pointless and you'd just buy the best model. It isn't flat.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pricing math
&lt;/h2&gt;

&lt;p&gt;Anthropic lists Fable 5 at $10 per million input tokens and $50 per million output tokens.&lt;/p&gt;

&lt;p&gt;The trap in agent workflows is that spend doesn't scale with tasks, it scales with turns. One "check these twelve documents" task is not twelve calls. It's twelve reads, a pile of pairwise comparisons, a revision, a validation pass, and however many retries. The loop is the product and the loop is the cost.&lt;/p&gt;

&lt;p&gt;We run on the &lt;a href="https://buda.im/claude-fable-5" rel="noopener noreferrer"&gt;Buda AI Agent Workspace&lt;/a&gt;, where Fable 5 is a subscription-only premium tier rather than the default, and the credit multipliers are stated where you pick: Sonnet 4.6 at 1.0x, Opus 4.8 at 1.7x, Fable 5 at 3.3x. The specific stack matters less than the property. If the cost of a routing decision isn't visible when you make it, you'll make it once in week one and never revisit it.&lt;/p&gt;

&lt;p&gt;The persistent workspace turned out to matter more than the multipliers. The reason we resisted routing for so long was a worry that switching models mid-workflow would lose the thread. When every step reads the same context, that stops being a concern and routing costs you nothing to adopt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gotchas
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The safety fallback.&lt;/strong&gt; Anthropic says Fable 5 includes safety classifiers and that some cybersecurity, biology, chemistry, and distillation-related requests may automatically get a response from Claude Opus 4.8 instead, at under 5% of sessions on average. We hit this on a security-review workflow and spent a day chasing a nonexistent bug. Log which model actually answered. It's a one-line change that will save someone an afternoon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retries are invisible.&lt;/strong&gt; Each retry looks cheap, so nobody instruments them. Ours were about 2.5x my estimate. Track retries per task per tier before you trust any cost model you've built.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't route by vibes.&lt;/strong&gt; "This step feels important" is not a criterion. Blast radius is, and two people looking at the same step will usually agree on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently
&lt;/h2&gt;

&lt;p&gt;Start with the routing table, not the model choice. Walk your pipeline, mark each step by how far a bad answer travels, and you'll usually find the expensive question is a small identifiable minority you've been funding by inertia.&lt;/p&gt;

&lt;p&gt;The best model available is the right choice for the steps where being wrong is expensive. It's a bad default for everything else, and everything else is most of your bill.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>architecture</category>
      <category>costoptimization</category>
    </item>
    <item>
      <title>I built a view-velocity tracker for our devrel channel, then learned the YouTube API quota lesson the hard way (twice)</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Fri, 10 Jul 2026 17:07:49 +0000</pubDate>
      <link>https://dev.to/douzatan/i-built-a-view-velocity-tracker-for-our-devrel-channel-then-learned-the-youtube-api-quota-lesson-1dlj</link>
      <guid>https://dev.to/douzatan/i-built-a-view-velocity-tracker-for-our-devrel-channel-then-learned-the-youtube-api-quota-lesson-1dlj</guid>
      <description>&lt;p&gt;We ship developer tutorials on a channel nobody outside the company would call famous. Solid mid-size, a couple dozen new subscribers on a good week. For most of last year, our entire notion of "did that video work" was whoever ran the release checking the count a few days later and pasting a screenshot into Slack. That is not measurement. That is a vibe with a timestamp.&lt;/p&gt;

&lt;p&gt;The problem with a raw view count is that it only goes up. It is cumulative by construction, so it can never tell you the one thing you actually care about: is this video still gaining, or did it flatline the day the launch tweet fell off people's timelines? The signal lives in the derivative — views per day, per video, tracked from the moment it goes public. Velocity is where you can see a topic actually land versus a topic that just accumulates dust at a slow, respectable rate.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Tuesday-afternoon version
&lt;/h2&gt;

&lt;p&gt;So of course I decided to build the thing. The YouTube Data API hands you a view count if you ask nicely, and a cron job that writes snapshots to Postgres sounded like a Tuesday afternoon. Here is roughly where I started:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;timezone&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;googleapiclient.discovery&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;

&lt;span class="n"&gt;VIDEO_IDS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[...]&lt;/span&gt;  &lt;span class="c1"&gt;# our catalog + a few benchmark videos
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;fetch_stats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_ids&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;yt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;build&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;youtube&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;v3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;developerKey&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;YT_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[]&lt;/span&gt;
    &lt;span class="c1"&gt;# the API caps id lists at 50, so chunk it
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;video_ids&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;chunk&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;video_ids&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;yt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;videos&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;list&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;part&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statistics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;chunk&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
        &lt;span class="n"&gt;out&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;extend&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;items&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;snapshot&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;ts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;now&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;timezone&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;utc&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;item&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;fetch_stats&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;VIDEO_IDS&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="nf"&gt;store_row&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;video_id&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;id&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
            &lt;span class="n"&gt;views&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;item&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statistics&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;viewCount&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
            &lt;span class="n"&gt;captured_at&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ts&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This runs. It works on the first try, which is exactly the kind of early success that sets you up for later humility.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning the quota ceiling twice
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Quota lesson, part one.&lt;/strong&gt; The Data API doesn't bill you in requests, it bills you in quota units, and the default ceiling is 10,000 units a day. A &lt;code&gt;videos.list&lt;/code&gt; call is cheap on paper — one unit per call — but I got greedy. I wanted fine-grained curves, so I scheduled the job hourly across the whole back catalog plus benchmark videos, and I was also, in the same key, running an unrelated &lt;code&gt;search.list&lt;/code&gt; experiment. &lt;code&gt;search.list&lt;/code&gt; costs 100 units a pop. You can do the arithmetic faster than I did that afternoon. I found out the ceiling existed the way everyone finds out, via a &lt;code&gt;403 quotaExceeded&lt;/code&gt; at 3pm with half the day's snapshots missing and a gap in the data I could never backfill.&lt;/p&gt;

&lt;p&gt;The fix was boring and correct: separate the cheap recurring job onto its own key, drop snapshot frequency to something the data actually justified (more on that below), and put the expensive experiments behind a budget I checked before running. I wrote it down. I felt smart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quota lesson, part two,&lt;/strong&gt; which is the one I'm slightly embarrassed about, arrived about six weeks later. I'd overcorrected — went to hourly again during a big launch because I "didn't want to miss the shape of the spike" — and quietly reintroduced the same problem on a different key. Turns out the lesson I'd written down was about arithmetic, and the lesson I actually needed was about restraint. For view counts, hourly granularity is noise. YouTube's own reported counts lag and settle anyway; the number you read at 2pm and 3pm are frequently the same number. Daily snapshots answer every real question, and once-daily is basically free. I did not need the spike in fifteen-minute resolution. I needed to know if the video held for three weeks.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real work was everything around the API call
&lt;/h2&gt;

&lt;p&gt;Here's the part the API tutorials never mention, and it's the one that actually cost me. The &lt;code&gt;videos.list&lt;/code&gt; call was the afternoon project. Everything &lt;em&gt;around&lt;/em&gt; it was the real project, and it never stopped generating work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;joining snapshots against publish dates so I could align everything to "days since release" instead of wall-clock time&lt;/li&gt;
&lt;li&gt;computing per-day deltas without letting a single missed snapshot produce a fake negative&lt;/li&gt;
&lt;li&gt;a comparison view so a new video could be read against the last three of the same type&lt;/li&gt;
&lt;li&gt;a chart the rest of the team would actually open, which meant not Grafana, which meant more work&lt;/li&gt;
&lt;li&gt;some kind of "this one is spiking, look now" nudge&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is hard. All of it is maintenance, forever, for an internal tool whose entire user base was five people who mostly wanted a chart on Fridays. I had accidentally become the sole maintainer of a small analytics product, and the roadmap was writing itself in Jira.&lt;/p&gt;

&lt;h2&gt;
  
  
  Auditing the questions I actually had
&lt;/h2&gt;

&lt;p&gt;At which point I did the audit I'm always telling other people to do, and asked what our questions genuinely were. Written out, they were embarrassingly ordinary:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which of the last month's videos are still gaining versus stalling?&lt;/li&gt;
&lt;li&gt;How does this launch compare to the previous one at the same age?&lt;/li&gt;
&lt;li&gt;Did that conference shout-out actually move anything, or did we imagine it?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Those are not exotic questions. They do not require infrastructure I babysit. They require a snapshot history that keeps building on its own and a curve someone else keeps the lights on for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Moving routine tracking off my plate
&lt;/h2&gt;

&lt;p&gt;So the routine tracking moved to the &lt;a href="https://allyhub.com/tools/youtube-view-tracker" rel="noopener noreferrer"&gt;AllyHub YouTube View Tracker&lt;/a&gt;. I pointed it at our channel plus a handful of benchmark videos from adjacent channels — public counts only, nothing you couldn't read yourself — and let it take the periodic snapshots, hold the history, and draw the per-day velocity curves. The part that sold me wasn't a feature on a page. It was that I set it up once as a saved workflow and then stopped thinking about it. It keeps extending the history every day without me rebuilding the reporting layer I'd already rebuilt twice. The setup is the whole cost; after that it just compounds, because it never starts the history over from scratch. The team checks it after each release the way you'd glance at any dashboard, and nobody pings me when a cron job dies, because there is no cron job of mine to die.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where a hosted tracker earns its place
&lt;/h2&gt;

&lt;p&gt;I want to be fair about the trade, because "just use the hosted thing" is lazy advice on its own. YouTube Studio is still the right tool for deep analytics on your &lt;em&gt;own&lt;/em&gt; channel — retention graphs, traffic sources, the swipe-away moment in the first thirty seconds. Nothing external replaces that, and I'd be suspicious of anyone claiming otherwise. Where a self-maintained script or a hosted tracker earns its place is the cross-video, multi-channel history: tracking your stuff &lt;em&gt;and&lt;/em&gt; reference videos side by side over months, which Studio doesn't do and which I no longer want to keep an API budget alive for.&lt;/p&gt;

&lt;p&gt;And the script isn't dead. It kept exactly one job: a cohort analysis that ties video views to our docs traffic, which is genuinely weird and specific to us, and which no general tool should be expected to do. Stripped down to that single question, the script is actually better than it was when it was trying to be a whole product. Small tools that do one strange thing age well. Sprawling internal tools that do the same four ordinary things every dashboard does are just quota bills waiting to surprise you.&lt;/p&gt;

&lt;p&gt;The general shape here keeps recurring in my career, so I'll state it plainly: an API makes data access look free, and then the real bill arrives in the reporting layer nobody scoped in the estimate. Build that layer when your questions are genuinely strange. Ours weren't. They were the same three questions every channel owner asks, asked once a week — and the right answer to a boring recurring question is almost never a bespoke system you personally maintain.&lt;/p&gt;

&lt;p&gt;Views on this post will be tracked, naturally. Some habits you keep on purpose.&lt;/p&gt;

</description>
      <category>youtube</category>
      <category>datascience</category>
      <category>devrel</category>
      <category>api</category>
    </item>
    <item>
      <title>Notes: monthly hashtag report for the docs community</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:42:36 +0000</pubDate>
      <link>https://dev.to/douzatan/notes-monthly-hashtag-report-for-the-docs-community-1l6b</link>
      <guid>https://dev.to/douzatan/notes-monthly-hashtag-report-for-the-docs-community-1l6b</guid>
      <description>&lt;p&gt;Internal notes for the community pulse report I put together each month for our open-source project. We watch a small set of hashtags to see where people are talking about the project and which content formats actually travel. Writing the process down so I stop rebuilding it from memory every four weeks, and so whoever inherits this after me isn't starting cold.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the report needs
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Post count per tracked hashtag, compared to the previous two months&lt;/li&gt;
&lt;li&gt;Top 15 posts by engagement — public accounts only&lt;/li&gt;
&lt;li&gt;Caption text, for a rough keyword frequency pass&lt;/li&gt;
&lt;li&gt;Format breakdown (image / carousel / reel)&lt;/li&gt;
&lt;li&gt;Nothing that fingerprints a private individual. Aggregate figures only.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Keep it boring and keep it comparable. The value is in the month-over-month line, not in any single number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Options tested
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Instaloader (Python).&lt;/strong&gt; Good library, readable docs, did the job for a while. Broke on me twice in one quarter — once on a login challenge, once when rate limits tightened and my loop was too greedy. Perfectly fine if you enjoy the occasional maintenance evening. I stopped enjoying them around the third patch.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Official Graph API.&lt;/strong&gt; The sanctioned route, and the right answer if it fits. It doesn't fit us: hashtag search is scoped to business accounts you manage plus a narrow recent window, so the historical, cross-account view this report depends on isn't reachable. Ruled out on capability, not principle.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosted browser tool — current pick.&lt;/strong&gt; Using the &lt;a href="https://allyhub.com/tools/instagram-scraper" rel="noopener noreferrer"&gt;Instagram hashtag scraper&lt;/a&gt; from AllyHub. Runs as an extension inside my own logged-in session and exports CSV, so there's no proxy or session file for me to keep alive. First run per hashtag is a touch slower while it learns the page; after that the setup is saved and re-runs are one click. It rode through a profile-page redesign in June without any intervention from me — reads the live page instead of a selector I wrote down last spring — which is the specific reason it's still on this list and the other two aren't.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Monthly procedure
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Run collection for each tracked hashtag. ~15 min total end to end. Do it over coffee.&lt;/li&gt;
&lt;li&gt;Drop the exported CSVs into &lt;code&gt;data/YYYY-MM/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;make report&lt;/code&gt; (the pandas script lives in the repo).&lt;/li&gt;
&lt;li&gt;Eyeball the top-posts table for anything obviously misparsed — duplicate rows, a reel with a suspiciously round like count, that kind of thing.&lt;/li&gt;
&lt;li&gt;Ship the report to the mailing list.&lt;/li&gt;
&lt;li&gt;Delete raw caption data once the report is out. Keep aggregates only.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Rules we follow
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Public data only, and only accounts posting under our project hashtags.&lt;/li&gt;
&lt;li&gt;Request volume stays low. This is a monthly pulse check, not surveillance.&lt;/li&gt;
&lt;li&gt;No personal data retained beyond the reporting window — see step 6, it's not optional.&lt;/li&gt;
&lt;li&gt;Re-read the platform ToS each quarter. If the rules move, the procedure moves with them.&lt;/li&gt;
&lt;li&gt;If in doubt about whether something belongs in the report, leave it out.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Open questions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Reel engagement counts look inconsistent between collection runs. Verify against a couple of known posts before trusting any reel trend line.&lt;/li&gt;
&lt;li&gt;[ ] One of the five hashtags is basically noise now — mostly unrelated posts. Consider dropping it next month.&lt;/li&gt;
&lt;li&gt;[ ] Automate step 4? Leaning no. The manual eyeball has caught two bad exports that a naive check would have waved through. Cheap insurance.&lt;/li&gt;
&lt;li&gt;[ ] Worth adding a simple diff against last month's top posts, so recurring high performers are easy to spot? Maybe. Low priority.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Notes to self
&lt;/h2&gt;

&lt;p&gt;The whole report is about 90 minutes of work now, and roughly two-thirds of that is the writing and interpretation — which is the part worth doing. When collection starts eating more than 20 minutes, something upstream has changed and it's worth stopping to look rather than pushing through. Past me learned that the expensive way.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The content audit that didn't need me to build a scraper</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Tue, 07 Jul 2026 14:33:38 +0000</pubDate>
      <link>https://dev.to/douzatan/the-content-audit-that-didnt-need-me-to-build-a-scraper-21d5</link>
      <guid>https://dev.to/douzatan/the-content-audit-that-didnt-need-me-to-build-a-scraper-21d5</guid>
      <description>&lt;p&gt;A client came to me in June with a request that sounded like a Tuesday afternoon and turned into a small research project. They'd been posting to Instagram for three years, roughly 380 posts, and nobody could say which of them earned their keep. "Which posts actually worked, and is there a pattern?" That's it. That's the whole brief.&lt;/p&gt;

&lt;p&gt;The trouble is that the honest answer lives in data the platform doesn't hand you nicely. Instagram's own export covers a rolling window that stops well short of three years. To compare a post from last spring against one from two summers ago, I needed captions, hashtags, timestamps, and engagement counts sitting together in one table. So, like every developer who has ever been handed this problem, I opened a terminal and started to write a scraper. Then I remembered the last three times I did that.&lt;/p&gt;

&lt;p&gt;Let me save you the evening I already spent.&lt;/p&gt;

&lt;h2&gt;
  
  
  The dead path: static requests
&lt;/h2&gt;

&lt;p&gt;The first thing everyone tries is the cheapest thing, a plain HTTP GET and a parser:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;bs4&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;BeautifulSoup&lt;/span&gt;

&lt;span class="n"&gt;resp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.instagram.com/some_brand/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;headers&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;User-Agent&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Mozilla/5.0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;soup&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;BeautifulSoup&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;resp&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;html.parser&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;posts&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;soup&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;select&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;article a&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# optimism
&lt;/span&gt;&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;posts&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# prints 0
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns an empty shell. The page you get back is a scaffold that JavaScript fills in later, and the tidy JSON blob that older tutorials tell you to fish out of a &lt;code&gt;&amp;lt;script&amp;gt;&lt;/code&gt; tag has been moved, renamed, or gated behind a request signature that changes. Static scraping of Instagram has been effectively dead for years. If a Stack Overflow answer suggests &lt;code&gt;?__a=1&lt;/code&gt;, check the date on it, then close the tab.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fragile path: headless browser
&lt;/h2&gt;

&lt;p&gt;Next rung up is driving a real browser. Playwright is genuinely good at this, and for a lot of sites I'd stop here:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;playwright.sync_api&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sync_playwright&lt;/span&gt;

&lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;sync_playwright&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;browser&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chromium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;launch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;headless&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;browser&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;new_page&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;goto&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://www.instagram.com/some_brand/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Now you inherit a queue of problems:
&lt;/span&gt;    &lt;span class="c1"&gt;#   - the login/consent wall that appears for logged-out sessions
&lt;/span&gt;    &lt;span class="c1"&gt;#   - the cookie banner that steals your first click
&lt;/span&gt;    &lt;span class="c1"&gt;#   - infinite scroll, so you loop scroll + wait + collect
&lt;/span&gt;    &lt;span class="c1"&gt;#   - selectors like div._aagv that mean nothing and change monthly
&lt;/span&gt;    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;_&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="nf"&gt;range&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;30&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
        &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;mouse&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wheel&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;wait_for_timeout&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1500&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="n"&gt;cards&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;page&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query_selector_all&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;article img&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;# ...and half of these are avatars, not posts
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every one of those comments is a real bug I have chased at an hour I'd rather not admit. The scroll-and-collect loop is fiddly but fine. The login wall is where it gets grim: to see a full profile reliably you end up feeding it a session, which means storing credentials, rotating them when challenges fire, and quietly hoping the account doesn't get flagged for behaving like a bot. Add a datacenter IP to that mix and you've built a machine whose main job is looking suspicious.&lt;/p&gt;

&lt;p&gt;And the selectors. &lt;code&gt;div._aagv&lt;/code&gt; is not an API. It's an obfuscated class name that Instagram's build tooling regenerates, and when it flips, your scraper doesn't error loudly — it collects zeros and keeps a straight face. You find out days later when the numbers look wrong.&lt;/p&gt;

&lt;p&gt;Here's the thing that finally landed for me: you don't &lt;em&gt;write&lt;/em&gt; an Instagram scraper. You adopt one, and then you feed it forever. For a product where scraping is the product, fine, that's the job. For a one-off content audit billed as a fixed fee, maintaining bespoke browser automation is just lighting money on fire.&lt;/p&gt;

&lt;h2&gt;
  
  
  The economics, stated plainly
&lt;/h2&gt;

&lt;p&gt;The client needed this data once. Maybe again next quarter if the audit proved useful. Not hourly, not daily. So the calculus wasn't "which scraper is most powerful," it was "how do I get a clean CSV without signing up for a maintenance contract with myself."&lt;/p&gt;

&lt;p&gt;I evaluated a handful of hosted options against boring criteria: does it export the fields I need, does it handle public profile data without me managing proxies, and does it treat platform terms as real. The one I shipped with was the &lt;a href="https://allyhub.com/tools/instagram-scraper" rel="noopener noreferrer"&gt;AllyHub Instagram Scraper&lt;/a&gt;, and the deciding factor was architectural rather than featural. It runs as a browser extension inside my own logged-in session. That's a meaningfully different design from the datacenter-IP tools: it reads the same pages I can already see, behaves like a person actually browsing, and there are no proxies or session tokens for me to babysit.&lt;/p&gt;

&lt;p&gt;There was a second thing I only appreciated on the third run. The initial collection is slower because it's learning the page structure — walking the grid, figuring out where the counts live. After that, the setup is saved as a reusable one-click job, so re-running it skips the exploration and just goes. When a profile layout shifted mid-project (Instagram redesigns something roughly whenever I get comfortable), the re-run recovered on its own, because it reads the live page rather than trusting a selector I wrote down last month. My workflow didn't start from scratch again, which is exactly the part I was dreading.&lt;/p&gt;

&lt;p&gt;I pointed it at the account, let it collect, and exported captions, hashtags, post dates, and engagement counts to CSV. Total setup time was a coffee. Then I got to do the work I was actually hired for.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I wanted to spend time on
&lt;/h2&gt;

&lt;p&gt;Everything below is pandas, which is where a data question deserves to live:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;pandas&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;

&lt;span class="n"&gt;df&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;pd&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;read_csv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;brand_posts.csv&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;parse_dates&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;posted_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;

&lt;span class="c1"&gt;# normalize engagement so likes and comments are comparable-ish
&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eng&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;likes&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;comments&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;

&lt;span class="c1"&gt;# format = carousel / image / video, inferred at export
&lt;/span&gt;&lt;span class="n"&gt;by_format&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;format&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eng&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;agg&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
      &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;ascending&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;by_format&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For this account, carousels ran away with it — the median carousel outperformed the median single image by a wide margin, and it wasn't close. Video sat in the middle. That alone reframed their whole 2025 plan.&lt;/p&gt;

&lt;p&gt;Then the timing question, the one the client was sure about:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dow&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;posted_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;day_name&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hour&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;posted_at&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;dt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;hour&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hour&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eng&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;median&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;round&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They believed posting time was everything. The medians by hour were nearly flat. Whatever advantage a "best time to post" gave them was drowned out by format and topic. Uncomfortable, useful finding.&lt;/p&gt;

&lt;p&gt;The hashtags were the fun part. I exploded the tag column and joined it back to engagement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;tags&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;assign&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;df&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;hashtags&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nb"&gt;str&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;()).&lt;/span&gt;&lt;span class="nf"&gt;explode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tag&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;tag_perf&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;groupby&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;tag&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;eng&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;agg&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;query&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;count &amp;gt;= 10&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort_values&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;median&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tag_perf&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;head&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;   &lt;span class="c1"&gt;# their worst-associated tags
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Two hashtags the client used on nearly every post correlated with their &lt;em&gt;lowest&lt;/em&gt; performers. Not causation — probably those tags rode along on low-effort posts — but it was enough to start a genuinely interesting conversation about what they were signaling to the algorithm versus to humans.&lt;/p&gt;

&lt;h2&gt;
  
  
  The unglamorous but non-optional part
&lt;/h2&gt;

&lt;p&gt;Some ground rules, because a technical post that skips them is doing you a disservice.&lt;/p&gt;

&lt;p&gt;Collect public data only. This was a business account's own public posts, aggregated. Respect rate limits even when a tool would happily let you steamroll them — polite volume keeps you out of trouble and keeps the platform usable for everyone. Read the platform terms and your local regulations before you scrape anything, because "it was technically reachable" is not a legal theory. And if your dataset touches individual people, ask whether you'd be comfortable explaining it to their faces. Aggregate analysis of a brand's public content is a normal thing to do. Assembling profiles of private individuals is not, and nothing here is a recipe for that.&lt;/p&gt;

&lt;p&gt;Start-to-delivery on the whole engagement was about half a day, and nearly all of it was spent in the notebook arguing with the data — which is the only part worth billing for. The scraper stayed exactly where I wanted it: not my problem, not my codebase, not my 11pm.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>python</category>
      <category>automation</category>
      <category>datascience</category>
    </item>
    <item>
      <title>I Turned My Conference Talk Notes Into a Lecture Video Without Filming Anything</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sun, 05 Jul 2026 15:25:31 +0000</pubDate>
      <link>https://dev.to/douzatan/i-turned-my-conference-talk-notes-into-a-lecture-video-without-filming-anything-5g46</link>
      <guid>https://dev.to/douzatan/i-turned-my-conference-talk-notes-into-a-lecture-video-without-filming-anything-5g46</guid>
      <description>&lt;p&gt;I gave an internal talk last quarter on how our team handles background jobs. It went fine, a few people asked good questions, and then it evaporated the way internal talks do. The slides sat in a folder. New hires who joined a month later got a link to a deck with no context, which is another way of saying they got nothing. I kept meaning to record a proper version and kept not doing it, because "record a proper version" meant booking time, setting up, and editing, and I write backend code, not video.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15z47n7r57bijhgqncng.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F15z47n7r57bijhgqncng.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I tried the lazy-engineer approach: feed the material I already had into a tool and see what came out. This is a short writeup of that, including where it fell short, because I would have wanted that before spending an afternoon on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem with slides-as-documentation
&lt;/h2&gt;

&lt;p&gt;Slides are a terrible standalone artifact. They are built to support a person talking, so without the person they are a series of bullet points missing their most important layer. A written doc is better for reference but worse for a first pass, because nobody learns a system by reading a wall of prose top to bottom. The thing that actually onboards someone is watching a walkthrough once, at their own pace, then keeping it around to re-scan. That is exactly the artifact I never had time to make.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I actually did
&lt;/h2&gt;

&lt;p&gt;I used an &lt;a href="https://leadde.ai/tools/ai-lecture-video-maker" rel="noopener noreferrer"&gt;AI lecture video maker&lt;/a&gt; and gave it what I already had: the slide deck plus my speaker notes as text. It drafted an outline, laid out the scenes, and generated the narration. The part I did not expect to care about but ended up using: you set a narrative style and a level of detail, and you can name the audience. I set it to explanatory, comprehensive, audience "new backend engineer," and the script came out teaching the material rather than just reading the bullets.&lt;/p&gt;

&lt;p&gt;A few things that mattered for my use case. There are built-in presenters and you can generate an avatar from a single photo, so I did not have to be on camera, which is the main reason this never happened before. And because the input was text I already had, fixing a wrong explanation meant editing the text, not re-recording a take. For someone who iterates on code all day, editing a script and regenerating felt normal in a way that reshooting never would.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it fell short
&lt;/h2&gt;

&lt;p&gt;I said I would be honest, so: the presenter reads as slightly synthetic if you watch closely. For internal training I do not care; for something customer-facing where a real person builds trust, I would film myself. It is also much better at conceptual and procedural explanation than at anything that needs live screen interaction. When I wanted to show an actual debugging session in the terminal, a real screen capture was the right tool, not this. And the output is only as clear as your input. My first pass produced a mediocre video because my speaker notes were sloppy; once I tightened the notes, the video got noticeably better. The tool does not do your thinking for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Was it worth it
&lt;/h2&gt;

&lt;p&gt;For turning existing talk material into reusable onboarding, yes, clearly. The specific win is that it collapsed a task I would never actually do (produce a polished video from scratch) into one I would (feed in notes, review, regenerate). Our new hires now get the background-jobs walkthrough as a video instead of an orphaned deck, and I did not touch a camera or a timeline.&lt;/p&gt;

&lt;p&gt;If you have a folder of talks or internal decks that died the moment they were presented, that is the pile worth pointing at this. Take the one thing people keep asking you to re-explain, run it through a free tier from the notes you already have, and see if the version that comes out is good enough to hand to the next person who asks. For me it was.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Posted by a backend engineer who writes about developer experience, onboarding, and internal tooling.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>leadde</category>
    </item>
    <item>
      <title>Vomo: the complete guide to the AI meeting notes app (2026)</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sat, 04 Jul 2026 16:34:15 +0000</pubDate>
      <link>https://dev.to/douzatan/vomo-the-complete-guide-to-the-ai-meeting-notes-app-2026-26hm</link>
      <guid>https://dev.to/douzatan/vomo-the-complete-guide-to-the-ai-meeting-notes-app-2026-26hm</guid>
      <description>&lt;p&gt;This is a reference post for anyone researching Vomo: what the product does, what it costs, what it supports, and where its edges are. I've tried to keep it factual and current as of July 2026; details like pricing can change, so treat the product site as the final word: &lt;a href="https://vomo.ai" rel="noopener noreferrer"&gt;https://vomo.ai&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Vomo?
&lt;/h2&gt;

&lt;p&gt;Vomo is an AI meeting notes and audio transcription service from EverGrow Tech Inc. The one-line pitch: give it hours of audio, get back structured notes in minutes. Where a classic transcription tool stops at a wall of text, Vomo returns a document with a summary at the top, the conversation split into timestamped chapters, speakers labeled, and action items collected into a list.&lt;/p&gt;

&lt;p&gt;The service reports 300,000+ users and runs on two surfaces: a web app that works in any browser, and an iOS app for recording on the go. Notes sync between them.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core workflow
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Capture.&lt;/strong&gt; Record live (app or web), upload an existing file, or paste a YouTube link. Supported uploads cover the common audio formats (MP3, WAV, M4A, FLAC, AAC, OGG) and video formats (MP4, MKV, FLV, AVI, MOV, WMV); the audio track is extracted from video automatically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transcribe.&lt;/strong&gt; Processing takes minutes, with a stated accuracy of 95%+ across 50+ languages. Language can be set manually or auto-detected. Speakers are identified and labeled automatically, with manual renaming available afterward.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Structure.&lt;/strong&gt; Vomo detects what kind of recording it is (meeting, interview, lecture) and applies a matching note template. Six templates exist: Default, available on the free plan, plus Team Meeting, Stand-up, Sales Call, Interview Evaluation, and Lecture/Podcast Highlights on Pro.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use.&lt;/strong&gt; Ask questions against the transcript in plain language and get answers drawn from the text itself. Edit, organize into folders, share via a link that readers can open without an account, or export as TXT, DOCX, PDF, SRT, Markdown, Image, or HTML.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Plans and pricing
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Free&lt;/th&gt;
&lt;th&gt;Pro&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$1.92/week (weekly, monthly, or yearly billing; yearly is discounted)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Transcription&lt;/td&gt;
&lt;td&gt;30 minutes per week&lt;/td&gt;
&lt;td&gt;Unlimited minutes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File length&lt;/td&gt;
&lt;td&gt;No per-file limit (3+ hour files fine)&lt;/td&gt;
&lt;td&gt;Same&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Templates&lt;/td&gt;
&lt;td&gt;Default&lt;/td&gt;
&lt;td&gt;All six&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud storage&lt;/td&gt;
&lt;td&gt;Standard&lt;/td&gt;
&lt;td&gt;Unlimited, no file-size caps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Speaker ID, summaries, Ask AI&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;td&gt;Included&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;No credit card is needed for the free tier. The pricing is the most unusual thing about Vomo commercially, since the mainstream competition in this category generally charges $10 to $30 per month.&lt;/p&gt;

&lt;h2&gt;
  
  
  A note on the YouTube tool
&lt;/h2&gt;

&lt;p&gt;Vomo also runs a free YouTube transcript generator that deserves its own mention: paste a video URL and get a transcript without even creating an account. Signing up (still free) adds AI summaries, chapters, and the ability to save transcripts to your library. It works with public, unlisted, and private videos you have access to, with no restriction on video length, though transcription time counts against the weekly quota on a free account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and data handling
&lt;/h2&gt;

&lt;p&gt;For anyone evaluating this for work use: recordings and transcripts are encrypted in transit and at rest, the service is GDPR-compliant, data isn't shared with third parties, and recordings can be deleted by the user at any time. Deleted files pass through a "Recently Deleted" folder, so accidental deletions are recoverable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who it fits, and who it doesn't
&lt;/h2&gt;

&lt;p&gt;Good fit: anyone whose problem is recordings that need to become readable notes. Consultants documenting client calls, researchers processing interviews, students converting lectures, content creators repurposing videos, and teams that want meeting minutes without assigning a minute-taker.&lt;/p&gt;

&lt;p&gt;Look elsewhere if: you need a bot that joins live Zoom/Meet calls and transcribes in real time (Otter.ai's territory), you want to edit audio/video by editing the transcript (Descript), or policy requires audio to never leave your machines (self-hosted Whisper).&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is Vomo really free?&lt;/strong&gt; The free plan is real but bounded: 30 transcription minutes per week. There's no per-file length limit on any plan.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does it handle bad audio?&lt;/strong&gt; It will transcribe noisy recordings with reduced accuracy; the company is upfront about this. Clear turn-taking helps the speaker labeling considerably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is there an Android app?&lt;/strong&gt; Not currently; iOS and web only. The web app covers Android users in practice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I share notes with people who don't use Vomo?&lt;/strong&gt; Yes. Share links open in a browser with no sign-up, and recipients can search within the note.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What It Takes to Build Real-Time AI Audio Transcription (Lessons from Studying Vomo)</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sat, 04 Jul 2026 15:52:37 +0000</pubDate>
      <link>https://dev.to/douzatan/what-it-takes-to-build-real-time-ai-audio-transcription-lessons-from-studying-vomo-1b9h</link>
      <guid>https://dev.to/douzatan/what-it-takes-to-build-real-time-ai-audio-transcription-lessons-from-studying-vomo-1b9h</guid>
      <description>&lt;p&gt;I spent a weekend recently trying to build a small transcription feature for an internal tool, assuming it would be a wrapper around a Whisper API call. Two days later I had a new respect for products that do this well.&lt;/p&gt;

&lt;p&gt;This post is a breakdown of what actually sits inside a production transcription pipeline, using &lt;a href="https://vomo.ai/" rel="noopener noreferrer"&gt;VOMO AI&lt;/a&gt; as a reference point for what "done properly" looks like from the outside. I don't work there and have no inside knowledge of their stack. This is a study of the problem space, with their product as the benchmark I kept failing to match.&lt;/p&gt;

&lt;h2&gt;
  
  
  The naive version works until it doesn't
&lt;/h2&gt;

&lt;p&gt;Here's the weekend-project architecture:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;audio file → chunk into 30s segments → ASR API → concatenate text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works on a clean podcast recording. It falls apart on real audio for reasons that are obvious in hindsight:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Chunk boundaries split words.&lt;/strong&gt; Cut at an arbitrary 30-second mark and you'll bisect a word, producing garbage on both sides of the seam. You need voice activity detection (VAD) to find silence and cut there instead.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No punctuation, no casing.&lt;/strong&gt; Raw ASR output is a lowercase stream. Restoring sentence boundaries is its own model pass.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Who said what?&lt;/strong&gt; A meeting transcript without speaker labels is close to useless. Speaker diarization, clustering voice embeddings to assign segments to speakers, is a separate and genuinely hard problem. It degrades badly when people talk over each other.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hallucination on silence.&lt;/strong&gt; ASR models trained on captioned data will confidently emit text like "thanks for watching" during long silent stretches. You have to filter these.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Each of these is a solved problem individually. Stitching them into a pipeline that returns a clean result in minutes, for a 3-hour file, in 50+ languages, is the actual product.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pipeline that production tools run
&lt;/h2&gt;

&lt;p&gt;From observing output quality across several commercial tools, the modern stack looks roughly like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ingest → resample/normalize → VAD segmentation
      → ASR (per-segment, batched, GPU)
      → punctuation &amp;amp; casing restoration
      → speaker diarization (parallel path)
      → alignment (merge words + speakers + timestamps)
      → post-processing (LLM: summary, chapters, action items)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few notes on the interesting parts:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Diarization runs parallel to ASR, not after it.&lt;/strong&gt; Diarization only needs the audio, not the words. The merge step afterward aligns word timestamps with speaker segments, which is where you see errors like a sentence's last word attributed to the next speaker.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long files are a throughput problem.&lt;/strong&gt; A 3-hour meeting is ~10,800 seconds of audio. Sequential processing at even 10x real-time speed means 18 minutes of waiting. Production systems fan segments out across GPU workers and merge results, which is why Vomo can return a multi-hour file in minutes while my sequential script took most of an hour.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The LLM layer is where products differentiate now.&lt;/strong&gt; Base transcription accuracy has converged; everyone respectable is in the 90s on clean audio (Vomo advertises 95%+). The gap has moved to what you do with the transcript. Vomo's approach is worth studying: it classifies the content type (meeting vs. interview vs. lecture), applies a matching template, and produces timestamped chapters, a summary, and action items in one pass. There's also a Q&amp;amp;A mode where you ask questions against the transcript and get answers grounded in the actual text. Retrieval over a single document, effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  The parts nobody blogs about
&lt;/h2&gt;

&lt;p&gt;The unglamorous engineering that separates a demo from a product:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Format handling.&lt;/strong&gt; Users upload MP3, WAV, M4A, FLAC, AAC, OGG, and then video too (MP4, MKV, MOV, AVI), expecting the audio track extracted silently. That's an ffmpeg layer with a long tail of weird codecs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Language detection.&lt;/strong&gt; Supporting 50+ languages means detecting the language &lt;em&gt;before&lt;/em&gt; choosing decode parameters, and handling code-switching mid-recording gracefully.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accents and noise.&lt;/strong&gt; My test recordings with background noise produced wildly variable results in my naive pipeline. Commercial models are fine-tuned on augmented noisy data; this is a data moat more than an architecture trick.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encryption and retention.&lt;/strong&gt; Meeting audio is some of the most sensitive data a company produces. At minimum you need encryption in transit and at rest, user-controlled deletion, and a GDPR story. Vomo checks these boxes; any pipeline you build for real users has to as well.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Should you build or buy?
&lt;/h2&gt;

&lt;p&gt;If transcription is your core product: build, obviously. If it's a feature (you want searchable meeting notes inside your app), the economics are brutal. GPU inference, diarization tuning, multilingual eval sets, and the LLM post-processing layer all cost real time to get right.&lt;/p&gt;

&lt;p&gt;For personal or team use, the buy math is even simpler. Vomo's Pro tier is $1.92/week for unlimited transcription minutes; the free tier gives you 30 minutes a week to evaluate output quality on your own audio, which is the only benchmark that matters. My weekend project is now a folder of abandoned Python scripts, and honestly, that's the correct outcome.&lt;/p&gt;

&lt;p&gt;If you've built diarization or streaming ASR in production, I'd genuinely like to hear what broke first. The comments are open.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>machinelearning</category>
      <category>whisper</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Top 10 AI Agent Platforms for Teams in 2026: An Honest Breakdown</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sun, 28 Jun 2026 12:46:36 +0000</pubDate>
      <link>https://dev.to/douzatan/top-10-ai-agent-platforms-for-teams-in-2026-an-honest-breakdown-16a0</link>
      <guid>https://dev.to/douzatan/top-10-ai-agent-platforms-for-teams-in-2026-an-honest-breakdown-16a0</guid>
      <description>&lt;p&gt;Two things you should know before reading any "Top 10 AI agent platforms" post, including this one.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;we build one of these.&lt;/strong&gt; I'm on the AllyHub team. That's a conflict of interest, and the honest way to handle it isn't to pretend it doesn't exist — it's to be transparent and let you discount accordingly. So I'm not going to rank our own product #1 in our own listicle. That would be the least credible thing I could do.&lt;/p&gt;

&lt;p&gt;Second, &lt;strong&gt;this list is not ranked by quality.&lt;/strong&gt; A strict 1-to-10 ranking implies there's a single best platform, and there isn't — there's a best platform &lt;em&gt;for a given kind of work&lt;/em&gt;. So I've grouped these by what each is actually good at, given each one a fair "best for" and "where it's weak," and put the decision framework at the end where it belongs.&lt;/p&gt;

&lt;p&gt;Here's the breakdown.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I'm evaluating these
&lt;/h2&gt;

&lt;p&gt;Five dimensions, the same ones I'd tell anyone to test before committing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web access depth&lt;/strong&gt; — can it handle real, messy, authenticated, paginated pages, or just clean ones?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation reliability&lt;/strong&gt; — does it complete cleanly, and fail &lt;em&gt;loudly&lt;/em&gt; when it doesn't?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory &amp;amp; compounding&lt;/strong&gt; — does the second run benefit from the first, or does cost stay flat?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pricing model&lt;/strong&gt; — predictable, and does it improve with reuse?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ease of setup&lt;/strong&gt; — how fast from "open the tool" to "first usable output"?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No platform wins on all five. The ones below trade across them in different ways.&lt;/p&gt;

&lt;h2&gt;
  
  
  Group 1 — General-purpose web agents
&lt;/h2&gt;

&lt;p&gt;These are the platforms built to take action on the open web: navigate, extract, automate across arbitrary sites.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Manus
&lt;/h3&gt;

&lt;p&gt;The strongest general-purpose agent I've tested. Open-ended, judgment-heavy tasks — research across a dozen unfamiliar sources, workflows where the steps aren't clear until you're mid-execution — are its home turf. The model reasoning is strong and the browser agent is reliable.&lt;/p&gt;

&lt;p&gt;The structural trait to know: it's stateless across tasks. Every run re-explores from scratch, so a recurring task costs the same on run fifty as run one.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: complex one-off tasks, exploratory research, maximum flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: recurring workflows where cost should drop over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. OpenAI Operator
&lt;/h3&gt;

&lt;p&gt;Deep browser automation with tight GPT integration, and improving steadily. If you're already in the OpenAI ecosystem, it's the natural choice and the integration pays off.&lt;/p&gt;

&lt;p&gt;As of mid-2026 it's still effectively stateless, and reliability has some gaps on harder sites — worth testing against your actual targets before you depend on it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: teams already standardized on OpenAI, browser automation tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: cross-task memory, edge-case reliability on messy sites.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. OpenClaw
&lt;/h3&gt;

&lt;p&gt;The developer's pick. The configuration control is the best of the group — if you want to specify exactly how extraction behaves and tune it, OpenClaw gives you the knobs. Precise and reliable on well-structured sites.&lt;/p&gt;

&lt;p&gt;The cost is setup time (steepest learning curve here) and output that leans text/markdown over clean structured data. Primarily stateless, though a technical team could build a persistence layer on top — and then maintain it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: technical teams that want control and will invest the ramp-up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: non-technical users, speed-to-first-output.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. AllyHub
&lt;/h3&gt;

&lt;p&gt;Our platform, so weigh this accordingly. &lt;a href="https://allyhub.com/" rel="noopener noreferrer"&gt;AllyHub&lt;/a&gt; is built around one specific bet: that execution should compound. The first time it works a site, it saves a structured map (a Manual); recurring multi-step jobs become reusable templates (Playbooks); and domain preferences accumulate as Skills. The effect is a per-task cost curve that bends downward with reuse — published numbers show second-run output at ~5× the first on the same site, and continued gains after.&lt;/p&gt;

&lt;p&gt;The honest weakness: the first run on a new site costs &lt;em&gt;more&lt;/em&gt; than a stateless agent's, because you're paying for exploration plus saving the map. For genuinely one-off work that never repeats, that cold-start tax is a bad trade and Manus is the better tool. The model only pays off with repetition.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: recurring research, monitoring, and data collection on the same sources.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: pure one-offs where compounding never kicks in.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  5. Genspark
&lt;/h3&gt;

&lt;p&gt;Search-first. When the task is really "find and synthesize an answer," it's fast and clean, and it's the quickest of the group to first output.&lt;/p&gt;

&lt;p&gt;It's less suited to precise multi-page extraction with pagination, and there's no cross-task memory to make repeats cheaper.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: research and answer-finding where synthesis beats structured extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: structured data collection, recurring-cost efficiency.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Group 2 — Workflow &amp;amp; integration platforms
&lt;/h2&gt;

&lt;p&gt;These are less about open-web browsing and more about orchestrating defined steps between systems. Different job, different strengths.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Lindy AI
&lt;/h3&gt;

&lt;p&gt;Strong at structured automation between defined tools, with workflow-level memory of the pipelines you build. Within its integration sweet spot it's reliable and pleasant to set up.&lt;/p&gt;

&lt;p&gt;Ask it to do open-ended web extraction and it's the wrong fit — that's just not what it's built for.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: automating defined workflows between existing SaaS tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: open-ended web data extraction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Zapier AI
&lt;/h3&gt;

&lt;p&gt;The natural choice when your workflow connects SaaS tools you already use via defined triggers. Huge integration catalog, and the AI layer is a sensible extension of what Zapier already does well.&lt;/p&gt;

&lt;p&gt;Less suited to navigating arbitrary websites or pulling structured data from pages that weren't built to export it.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: trigger-based automation across an existing SaaS stack.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: open-web tasks, deep data extraction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Relay.app
&lt;/h3&gt;

&lt;p&gt;Built with team workflows and human-in-the-loop steps in mind — approvals, handoffs, collaborative automation. A good fit when a workflow needs a person to check or approve at specific points rather than running fully unattended.&lt;/p&gt;

&lt;p&gt;Narrower web-agent capability than the Group 1 platforms; it's an orchestration layer, not a heavy-duty scraper.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: team workflows with approval/handoff steps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: autonomous deep-web extraction.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Group 3 — Flexible &amp;amp; self-hosted pipelines
&lt;/h2&gt;

&lt;p&gt;For teams that want to build their own automation logic and, in some cases, own the infrastructure.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Make (with AI)
&lt;/h3&gt;

&lt;p&gt;A flexible visual pipeline builder that handles complex conditional logic well, now with AI capabilities layered in. If you like designing the flow yourself and need branching, retries, and intricate routing, it gives you the canvas.&lt;/p&gt;

&lt;p&gt;The AI features are still maturing, and the flexibility comes with a build-it-yourself burden — power in exchange for setup effort.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: teams that want to design complex pipelines visually.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: out-of-the-box AI depth, time-to-value.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  10. n8n (with AI)
&lt;/h3&gt;

&lt;p&gt;The pick when self-hosting matters — data residency, compliance, or just wanting to own the stack. Open and extensible, with AI nodes available, and a strong fit for engineering teams comfortable running their own infrastructure.&lt;/p&gt;

&lt;p&gt;That ownership is also the cost: you run it, you maintain it, you debug it. Not a fit for teams that want a managed experience.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Best for&lt;/strong&gt;: engineering teams that need self-hosting and control.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where it's weak&lt;/strong&gt;: managed convenience, non-technical accessibility.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The comparison at a glance
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Platform&lt;/th&gt;
&lt;th&gt;Web depth&lt;/th&gt;
&lt;th&gt;Reliability&lt;/th&gt;
&lt;th&gt;Memory&lt;/th&gt;
&lt;th&gt;Pricing model&lt;/th&gt;
&lt;th&gt;Setup&lt;/th&gt;
&lt;th&gt;Best-fit job&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Manus&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Stateless&lt;/td&gt;
&lt;td&gt;Flat per-task&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;One-off complex tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenAI Operator&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;Stateless&lt;/td&gt;
&lt;td&gt;Token/API&lt;/td&gt;
&lt;td&gt;Fast&lt;/td&gt;
&lt;td&gt;OpenAI-ecosystem teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;OpenClaw&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Mostly stateless&lt;/td&gt;
&lt;td&gt;Token&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;Developer control&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AllyHub&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Compounding&lt;/td&gt;
&lt;td&gt;Drops with reuse&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Recurring workflows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Genspark&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;High (search)&lt;/td&gt;
&lt;td&gt;None&lt;/td&gt;
&lt;td&gt;Credit&lt;/td&gt;
&lt;td&gt;Fastest&lt;/td&gt;
&lt;td&gt;Research/synthesis&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lindy AI&lt;/td&gt;
&lt;td&gt;Low (open web)&lt;/td&gt;
&lt;td&gt;High (in scope)&lt;/td&gt;
&lt;td&gt;Workflow-level&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;SaaS automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Zapier AI&lt;/td&gt;
&lt;td&gt;Low (open web)&lt;/td&gt;
&lt;td&gt;High (in scope)&lt;/td&gt;
&lt;td&gt;Per-workflow&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Trigger automation&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Relay.app&lt;/td&gt;
&lt;td&gt;Low-Medium&lt;/td&gt;
&lt;td&gt;High (in scope)&lt;/td&gt;
&lt;td&gt;Workflow-level&lt;/td&gt;
&lt;td&gt;Subscription&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Team approval flows&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Make + AI&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Medium-High&lt;/td&gt;
&lt;td&gt;Per-scenario&lt;/td&gt;
&lt;td&gt;Usage-based&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;Custom pipelines&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;n8n + AI&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;td&gt;Depends on setup&lt;/td&gt;
&lt;td&gt;Self-managed&lt;/td&gt;
&lt;td&gt;Self-hosted&lt;/td&gt;
&lt;td&gt;Slow&lt;/td&gt;
&lt;td&gt;Self-hosted control&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The table flattens a lot of nuance, and the ratings reflect hands-on testing plus public docs as of mid-2026 — a snapshot in a category that moves fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually choose
&lt;/h2&gt;

&lt;p&gt;Skip the temptation to pick "the best one." Start from your work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If your tasks are mostly one-off and varied&lt;/strong&gt; → Manus or OpenAI Operator. Optimize for single-task quality and flexibility; memory does nothing for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're automating between SaaS tools you already use&lt;/strong&gt; → Zapier AI or Lindy AI. You're orchestrating systems, not exploring the open web.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If your workflows need human approval steps&lt;/strong&gt; → Relay.app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you want to design complex logic yourself, or must self-host&lt;/strong&gt; → Make or n8n, respectively.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you're a developer who wants maximum control on extraction&lt;/strong&gt; → OpenClaw, if you'll invest the setup time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If you run the same research/monitoring/collection workflows on a cadence&lt;/strong&gt; → a compounding platform like AllyHub, where recurring-cost efficiency is the whole point. Just remember the cold-start tax: it pays off on repetition, not on one-offs.&lt;/p&gt;

&lt;p&gt;And whichever shortlist you land on, run the only test that actually settles it: take your highest-frequency real task, run it on each candidate for a month, and compare week four to week one. If nothing improved, you're on a stateless tool — fine if your work is one-off, costly if it isn't. If the curve bent, you're on a compounding one. That one measurement beats any roundup, this one included.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Disclosure, again: written by the AllyHub team. We tried to give the other nine a fair shake and to be candid about where we're not the right call. If you think we've under- or over-rated any platform here, push back in the comments — that's how these lists get more useful.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>agents</category>
      <category>automation</category>
    </item>
    <item>
      <title>Top 10 AI Agent Platforms for Teams in 2026</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sat, 27 Jun 2026 16:04:44 +0000</pubDate>
      <link>https://dev.to/douzatan/top-10-ai-agent-platforms-for-teams-in-2026-1cn5</link>
      <guid>https://dev.to/douzatan/top-10-ai-agent-platforms-for-teams-in-2026-1cn5</guid>
      <description>&lt;p&gt;** I spent the last few months shortlisting "AI agent platforms" for a small product team, and most of the lists out there are either thinly veiled ads or rankings of consumer chat apps. This is the one I wish I'd had: 10 genuinely team-oriented options, each with a one-line "best for," sorted roughly by who they're built for rather than by hype. There's no single winner — the right pick depends on whether you value local control, multi-agent orchestration, deep IDE integration, or a managed cloud workspace your non-engineers can actually use.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "for teams" actually means
&lt;/h2&gt;

&lt;p&gt;Before the list, a quick filter, because "AI agent" is now slapped on everything from a fancy autocomplete to a fully autonomous coding swarm.&lt;/p&gt;

&lt;p&gt;A platform earns the &lt;strong&gt;team&lt;/strong&gt; label, in my book, if it handles a few unglamorous things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shared state.&lt;/strong&gt; More than one person can see what an agent did, why, and what it produced — without screen-sharing someone's laptop.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Persistent knowledge.&lt;/strong&gt; The agent doesn't forget your SOPs, policies, and prior outputs the moment a chat window closes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access boundaries.&lt;/strong&gt; You can scope who runs what, against which data, on which surfaces.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real tools, not just text.&lt;/strong&gt; Browsing, running code, version control, hitting APIs — the agent does work, it doesn't just describe it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Single-user "run it on my machine" tools can be brilliant, and I've included one on merit. But if your goal is to have agents that the whole team depends on, you'll feel the difference fast.&lt;/p&gt;

&lt;p&gt;A note on honesty: I've tried to give each platform a fair, falsifiable "best for." Pricing and feature details move fast — confirm specifics on each vendor's own page before you commit a budget. And full disclosure, this post is published from the Buda account; I've kept Buda's entry to the same standard as everyone else and put it where it honestly belongs rather than at #1.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. LangGraph — best for engineers who want to hand-build the orchestration
&lt;/h2&gt;

&lt;p&gt;If you think of an agent as a state machine — nodes, edges, conditional branches, retries — LangGraph is the framework that lets you say that out loud in code. It's a library, not a hosted product, which is exactly the point: you control the control flow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;langgraph.graph&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;

&lt;span class="n"&gt;graph&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;StateGraph&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;AgentState&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;plan_step&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_node&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;act&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tool_step&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;add_conditional_edges&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;act&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;should_continue&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;loop&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;plan&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;done&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;END&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;graph&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;compile&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; you get explicit, debuggable orchestration and full ownership of where state lives. &lt;strong&gt;The catch:&lt;/strong&gt; you're building (and operating) the surrounding platform yourself — auth, storage, UI, channels, scaling. Great when you have engineers to spare; painful when you don't.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; engineering teams that want maximum control over agent logic and will build the rest themselves.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. AutoGen — best for multi-agent conversation patterns
&lt;/h2&gt;

&lt;p&gt;AutoGen popularized the "agents talking to agents" pattern in a way that's pleasant to prototype with. You define roles — a planner, a coder, a critic — and let them converse toward a goal, with a human optionally in the loop. The conversation-as-orchestration model is genuinely useful for tasks where you want a built-in reviewer rather than one model marking its own homework.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; fast to stand up a "team" of cooperating agents and watch them debate. &lt;strong&gt;The catch:&lt;/strong&gt; the same conversational freedom that makes demos delightful can make production behavior hard to pin down — you'll add guardrails and termination conditions before you trust it unattended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams experimenting with structured multi-agent collaboration who are comfortable in Python.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. CrewAI — best for role-based "crews" with a gentler learning curve
&lt;/h2&gt;

&lt;p&gt;CrewAI leans into a metaphor that non-framework people grasp instantly: a crew of agents, each with a role, goal, and backstory, executing tasks in sequence or in parallel. It sits a notch above raw frameworks in ergonomics, which makes it a decent on-ramp for teams that have outgrown single-prompt scripts but aren't ready to wire up a full graph by hand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; the role/task abstraction maps cleanly onto how people already think about delegating work. &lt;strong&gt;The catch:&lt;/strong&gt; it's still code you run and host; opinionated abstractions are a blessing until the day your workflow doesn't fit the mold.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; small dev teams that want role-based agent workflows without writing orchestration from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Browser Use — best for reliable web automation as a building block
&lt;/h2&gt;

&lt;p&gt;Some of the most valuable "agent" work is mundane: log in here, click through there, scrape this table, fill that form. Browser Use focuses squarely on making an LLM drive a real browser reliably, which is harder than it sounds — pages change, selectors rot, and a single misclick can cascade. As a focused component it's excellent, and plenty of bigger systems use browser automation under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; it does one hard thing well and slots into larger pipelines. &lt;strong&gt;The catch:&lt;/strong&gt; it's a capability, not a full team platform — you'll wrap it with your own knowledge layer, scheduling, and access control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams that need dependable, programmable web automation inside a larger workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Manus — best for hands-off, long-running autonomous tasks
&lt;/h2&gt;

&lt;p&gt;Manus made waves as a general autonomous agent: give it a goal, walk away, come back to a finished artifact. The appeal is obvious for research-heavy or multi-step tasks where you'd rather supervise an outcome than babysit each step. For teams, the question is less "can it do impressive things in a demo" and more "can I reproduce, share, and govern what it did" — so evaluate it against your own repeatable tasks, not the highlight reel.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; ambitious end-to-end autonomy on open-ended goals. &lt;strong&gt;The catch:&lt;/strong&gt; the more autonomous a system, the more you need visibility and controls around it; budget time to test how transparent and steerable it actually is for your use cases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams comfortable delegating broad, long-horizon tasks and reviewing the result.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. OpenClaw — best for self-hosted, local-hardware control
&lt;/h2&gt;

&lt;p&gt;OpenClaw represents a philosophy I have a lot of respect for: run the whole agent stack yourself, on your own hardware — a beefy workstation, a Mac Mini humming in the corner, a homelab box. Your data never leaves the building, you're not metered by anyone, and you can poke at every layer. For privacy-sensitive teams and tinkerers, that's a strong pitch.&lt;/p&gt;

&lt;p&gt;The honest trade-offs are the ones inherent to any self-hosted, local-hardware setup, not anything specific to bash on OpenClaw:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You own the ops.&lt;/strong&gt; Updates, uptime, backups, and the GPU/CPU headroom are your problem.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It skews single-user / DIY.&lt;/strong&gt; Sharing a locally hosted agent across a distributed team — with real member management, shared storage, and multiple inbound channels — is extra work you assemble yourself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scaling is physical.&lt;/strong&gt; More concurrent work means more (or bigger) hardware.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of that is a knock; it's the deal you sign up for when you prize control and local data. If those are your top priorities, a local setup is a legitimately good answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; privacy-first individuals and hacker-minded teams who want full local control and don't mind running the infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Cursor / coding-agent IDEs — best for agentic work that lives in the repo
&lt;/h2&gt;

&lt;p&gt;I'm grouping the agentic coding IDEs here because, for engineering teams, this is where a huge amount of practical agent value already lands. An agent that lives inside your editor, understands the repo, edits across files, runs tests, and proposes diffs is doing real, reviewable work in the place engineers already are. The team story is improving steadily — shared rules, codebase awareness, PR-style review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; agents operate directly on code with human review built into the loop. &lt;strong&gt;The catch:&lt;/strong&gt; it's deliberately code-centric; your ops, legal, and support folks aren't going to run their workflows in an IDE.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; engineering teams that want agentic help embedded in the codebase and code review flow.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. n8n (+ AI nodes) — best for wiring agents into existing automations
&lt;/h2&gt;

&lt;p&gt;Plenty of teams don't need a brand-new agent platform so much as a way to drop LLM steps into the automations they already run. n8n's AI nodes let you treat an agent as one box in a larger visual workflow — trigger on an event, call a model, branch on the result, write to a database, ping Slack. Because n8n is self-hostable and integration-rich, it's a pragmatic choice for ops-heavy teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; agents become part of mature, visible automation pipelines you can self-host. &lt;strong&gt;The catch:&lt;/strong&gt; it's automation-first; the "agent" is a node, not a first-class workspace with its own memory, sandbox, and identity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; automation-led teams that want LLM steps inside workflows they already maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Buda — best for cloud-native, file-grounded agents the whole team can run
&lt;/h2&gt;

&lt;p&gt;Most of this list is either a framework you host or a tool you wire together. &lt;a href="https://buda.im/" rel="noopener noreferrer"&gt;Buda&lt;/a&gt; takes a different shape: it's a Drive-based AI agent platform built for teams, where agents work from real files in a cloud workspace — no local hardware to buy or babysit. The company analogy in its docs is the clearest way to get it: a &lt;strong&gt;Space&lt;/strong&gt; is the company, an &lt;strong&gt;Agent&lt;/strong&gt; is an employee with its own instructions and Drive, the &lt;strong&gt;Drive&lt;/strong&gt; is long-term memory (your SOPs, policies, contracts, generated outputs), and a &lt;strong&gt;Session&lt;/strong&gt; is a meeting room — isolated short-term context.&lt;/p&gt;

&lt;p&gt;That framing matters because it solves the two things that quietly break team agent projects: shared knowledge and shared access.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Drive-based memory.&lt;/strong&gt; Chat history isn't durable knowledge. Buda's habit is to save the important stuff to Drive so the next session — and the next teammate — can use it. Agents read from real files rather than re-discovering context every time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A real cloud workspace.&lt;/strong&gt; Each agent gets a sandbox with an AI Browser and Local Browser, a real Terminal, Git (visual diffs, branches, rollback), VS Code over Remote SSH, and WebPreview to expose a localhost app as a shareable URL. You can pick Standard Volume (object storage for docs and data) or High-Performance SSD (block storage for code repos and Git-heavy work) when you create the agent.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channel-connected.&lt;/strong&gt; One agent can serve people over the web, Slack, WhatsApp, Telegram, Discord, Feishu/Lark, WeCom, or Microsoft Teams — a Channel is an entry point, not a memory layer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-agent by design.&lt;/strong&gt; A Team in Buda is a group of agents with distinct roles and Skills that hand work off to each other, and there's a Marketplace to install or publish Skills, Agents, and Teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Under the hood, the docs split it into a compute layer (&lt;strong&gt;Claw Computer&lt;/strong&gt;, the isolated durable runtime) and a scheduling layer (&lt;strong&gt;Buda Organizer&lt;/strong&gt;, which decides what runs when) — i.e., it positions itself as an agent runtime plus workspace, not a model wrapper. There's also an OpenAPI REST API and &lt;strong&gt;API Claw&lt;/strong&gt; for embedding agent capability into your own products, with tenant isolation and session management handled for you.&lt;/p&gt;

&lt;p&gt;Where it earns the "for teams" label specifically: billing is &lt;strong&gt;per Space, not per seat&lt;/strong&gt;, members share a Space's Drive and credit pool, and customer-facing Support Agents can be locked read-only against a Drive knowledge base — a genuinely sane pattern for support and ops teams. On pricing, there's a Free tier (limited daily credits, limited storage), Plus at $20/agent/month and Pro at $100/agent/month (both with Browser/Terminal/Git and Automations; Pro adds High-Performance SSD), and a custom Enterprise tier with a self-host/on-prem option. Confirm current numbers on the live pricing page before you plan a budget.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The honest catch:&lt;/strong&gt; it's cloud-native, so if your hard requirement is everything-on-my-own-metal, the Enterprise self-host route exists but the default is the managed cloud. And Google Drive / OneDrive sync is on the roadmap, not live today — the current core is Buda's built-in Drive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; cross-functional teams (ops, support, HR, founders, plus developers) who want file-grounded cloud agents without standing up infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Roll-your-own on a model provider's Agent SDK — best for maximum control with managed inference
&lt;/h2&gt;

&lt;p&gt;The final "platform" is the one you assemble yourself directly on a model provider's agent SDK or assistants API — defining tools, running a tool-use loop, and managing your own state. You get the freedom of a framework with the convenience of managed inference and first-party tool-calling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why teams like it:&lt;/strong&gt; you're not locked into anyone's abstractions, and you build exactly the agent you need. &lt;strong&gt;The catch:&lt;/strong&gt; "exactly the agent you need" includes the storage, auth, channels, observability, and team UI — which is most of the actual work. Choose this when your requirements are unusual enough that no off-the-shelf platform fits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; teams with specialized needs and the engineering capacity to own the full stack.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to actually choose
&lt;/h2&gt;

&lt;p&gt;After all that, here's the decision shortcut I'd give a teammate:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If your top priority is...&lt;/th&gt;
&lt;th&gt;Look hard at...&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Local data, full control, no metering&lt;/td&gt;
&lt;td&gt;OpenClaw or another self-hosted/local setup&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Building bespoke orchestration in code&lt;/td&gt;
&lt;td&gt;LangGraph, AutoGen, CrewAI, or a provider Agent SDK&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Agentic help inside the codebase&lt;/td&gt;
&lt;td&gt;Cursor and the coding-agent IDEs&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dropping AI into existing automations&lt;/td&gt;
&lt;td&gt;n8n with AI nodes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Reliable web automation as a component&lt;/td&gt;
&lt;td&gt;Browser Use&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hands-off long-running tasks&lt;/td&gt;
&lt;td&gt;Manus&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;File-grounded cloud agents your whole team runs&lt;/td&gt;
&lt;td&gt;Buda&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Three questions cut through most of the noise:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Who has to operate it?&lt;/strong&gt; If the answer includes non-engineers, prioritize a managed workspace with real access controls over a framework someone has to host.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Where does the knowledge live?&lt;/strong&gt; If your agents keep "forgetting," you have a memory architecture problem, not a model problem. Favor platforms that treat durable files (not chat logs) as the source of truth.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Local or cloud?&lt;/strong&gt; This is the cleanest fork in the road. Local-hardware setups win on control and data residency; cloud-native platforms win on zero-ops and team sharing. Be honest about which you actually value, because trying to have both usually means building one of them yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  A few opinions to send you off
&lt;/h2&gt;

&lt;p&gt;A couple of things I've stopped apologizing for believing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The "best agent platform" doesn't exist.&lt;/strong&gt; A framework, an IDE agent, an automation tool, and a team workspace are answering different questions. Mixing two or three is normal and fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory beats model choice more often than people admit.&lt;/strong&gt; Teams obsess over which model to use, then watch their agents flail because the relevant SOP lives in someone's DMs. Get the knowledge layer right first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Self-hosted vs. cloud is a values call, not a correctness one.&lt;/strong&gt; I genuinely like that OpenClaw-style local control exists; I also genuinely like not maintaining hardware. Both can be the right answer for different teams in the same month.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Pilot two of these against one real, repeatable workflow you already do by hand — not a demo task — and let the results, not the marketing (mine included), decide. If you've shipped something with any of these in production, I'd love to hear what held up and what didn't in the comments.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>productivity</category>
      <category>devtools</category>
    </item>
    <item>
      <title>Why Developers Are Switching from Manual Workflows to AI Agent Platforms</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sun, 21 Jun 2026 11:06:13 +0000</pubDate>
      <link>https://dev.to/douzatan/why-developers-are-switching-from-manual-workflows-to-ai-agent-platforms-4pnb</link>
      <guid>https://dev.to/douzatan/why-developers-are-switching-from-manual-workflows-to-ai-agent-platforms-4pnb</guid>
      <description>&lt;p&gt;I want to talk about a category of work that almost no developer puts on their resume, but that quietly eats a real percentage of the week: the manual data-and-process work that sits around the actual building.&lt;/p&gt;

&lt;p&gt;Pulling competitor pricing into a spreadsheet. Scraping a list of repos or job postings for a research doc. Re-running the same export every Monday because the dashboard doesn't quite give you the cut you need. Reformatting one tool's output so another tool can read it. None of it is hard. All of it is repetitive. And it adds up.&lt;/p&gt;

&lt;p&gt;I spent a good chunk of the last year moving this kind of work off my own plate and onto AI agent platforms. Some of it worked immediately. Some of it I had to walk back. This post is about what actually changed, how to evaluate whether the switch makes sense for your workflow, and how to do it without setting fire to a week finding out.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0tp3e6zfu1rhhr7lw8ta.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F0tp3e6zfu1rhhr7lw8ta.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The manual workflow tax
&lt;/h2&gt;

&lt;p&gt;Let me put a number on the thing I'm describing, because "repetitive work adds up" is easy to nod along to and easy to ignore.&lt;/p&gt;

&lt;p&gt;I tracked my own recurring, low-judgment tasks for a month. The kind of thing where I already know exactly what I want — I'm just the one moving data from A to B. It came to roughly six hours a week. Not catastrophic. But six hours a week is most of a working day, every week, spent on work that requires my login credentials and my attention but almost none of my actual skill.&lt;/p&gt;

&lt;p&gt;The tasks broke down into three buckets that I suspect look familiar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Monitoring&lt;/strong&gt; — checking the same sources on a cadence: competitor pages, marketplace listings, subreddits, release notes, job boards.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collection&lt;/strong&gt; — pulling structured records out of pages that weren't built to export them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reformatting&lt;/strong&gt; — turning the output of one step into the input format the next step needs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The thing all three have in common: I do them the same way every time, on the same sources, in the same format. That repetition is exactly the property that makes them automatable — and, as I'll get to, exactly the property that determines which kind of platform is worth using.&lt;/p&gt;

&lt;h2&gt;
  
  
  What AI agents actually replace (and what they don't)
&lt;/h2&gt;

&lt;p&gt;Before the evaluation framework, an honest boundary, because over-promising here is how people end up disappointed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What agents replace well:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigating real websites — login flows, pagination, infinite scroll, dynamically loaded content — and extracting structured data from them.&lt;/li&gt;
&lt;li&gt;Chaining a defined sequence of steps: extract → transform → compare → format → deliver.&lt;/li&gt;
&lt;li&gt;Running that sequence on a schedule without you babysitting it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What they don't replace:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The judgment about &lt;em&gt;what&lt;/em&gt; to collect and &lt;em&gt;why&lt;/em&gt;. You still decide the question.&lt;/li&gt;
&lt;li&gt;Anything where the "right" answer requires taste, negotiation, or context the agent doesn't have.&lt;/li&gt;
&lt;li&gt;Exploratory work where you don't yet know what the workflow should look like. Agents are good at executing a known process, not at deciding what the process should be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The mental model that worked for me: an agent is a fast, tireless junior who's great at following a runbook and bad at writing one. Give it the runbook. Keep the runbook-writing.&lt;/p&gt;

&lt;h2&gt;
  
  
  An evaluation checklist for developers
&lt;/h2&gt;

&lt;p&gt;If you're going to move a workflow onto a platform, here's the checklist I wish I'd had on day one. It's deliberately skewed toward the things that don't show up in a feature comparison.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Does it handle the messy version of your site, not the clean one?&lt;/strong&gt;&lt;br&gt;
Demo sites are clean. Your actual target has a login wall, a layout that shifts between records, and a pagination scheme someone clearly invented on a Friday. Test against the real thing before you trust it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Does it fail loudly?&lt;/strong&gt;&lt;br&gt;
The dangerous failure mode isn't crashing — it's silently returning partial data that looks complete. You want a platform that tells you "I got 80 of an expected 100 records and here's why," not one that hands you 80 and a smile.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Can it produce structured output you can pipe somewhere?&lt;/strong&gt;&lt;br&gt;
CSV, XLSX, JSON — something with a schema you can specify. If the output is a narrative summary you have to re-parse, you've moved the manual work, not removed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Does the cost change between run one and run twenty?&lt;/strong&gt;&lt;br&gt;
This is the one developers consistently under-weight, and it's the one this whole post builds toward. More on it below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. How much setup does a new workflow cost, and do you get that cost back?&lt;/strong&gt;&lt;br&gt;
Onboarding a recurring workflow has real setup cost — defining the task, iterating on output, handling edge cases. The question is whether that's a sunk expense or an investment that amortizes across future runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The criterion that changed how I think about this
&lt;/h2&gt;

&lt;p&gt;Items 4 and 5 on that checklist are really the same question, and it's worth pulling out because it separates two genuinely different architectures.&lt;/p&gt;

&lt;p&gt;Most AI agent platforms are &lt;strong&gt;stateless&lt;/strong&gt;. Every execution starts from zero. The platform re-explores the site structure it mapped last week, re-derives the pagination logic, re-asks (implicitly or explicitly) about the output format you've specified a dozen times. Run one and run fifty cost the same and take the same time. For a task you do once, that's completely fine.&lt;/p&gt;

&lt;p&gt;A smaller set of platforms are built to &lt;strong&gt;compound&lt;/strong&gt;. They save what they learn — site structures, workflow templates, output preferences — and reuse it on the next run. The practical effect is a per-task cost curve that bends downward instead of staying flat.&lt;/p&gt;

&lt;p&gt;This maps directly onto the manual-workflow tax I described. The tax is highest exactly where work is &lt;em&gt;recurring&lt;/em&gt; — same sources, same format, same cadence. Which means a stateless platform automates the labor but not the waste: you stop doing the task by hand, but the platform still pays the full exploration cost every single cycle. A compounding platform is the only thing that actually attacks the recurring nature of the work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://allyhub.com/" rel="noopener noreferrer"&gt;AllyHub&lt;/a&gt; is the platform I've used that's most explicit about this model. The architecture has three pieces worth naming because they map cleanly onto the checklist above:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manuals&lt;/strong&gt; — the first time it visits a site, it maps the structure and saves it. Second visit, it skips exploration and goes straight to extraction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Playbooks&lt;/strong&gt; — recurring multi-step workflows saved as templates that refine with each run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Skills&lt;/strong&gt; — accumulated judgment about your formats, sources, and standards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The team frames the whole thing around ROTI — Return on Token Investment — the idea that each execution should produce value now &lt;em&gt;and&lt;/em&gt; build capability for the next run. Whether or not you adopt their vocabulary, the underlying distinction is the one that matters: does your platform's cost per unit of output drop as you reuse it, or not?&lt;/p&gt;

&lt;h2&gt;
  
  
  Real results from switching
&lt;/h2&gt;

&lt;p&gt;Here are the numbers AllyHub publishes from its own runs, which line up with the pattern I saw when I tested the compounding model on a recurring scrape:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Run&lt;/th&gt;
&lt;th&gt;Result&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Task 1 (first run, full exploration)&lt;/td&gt;
&lt;td&gt;20 records extracted&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task 2 (same site, new keyword)&lt;/td&gt;
&lt;td&gt;100 records, &lt;strong&gt;5× more output&lt;/strong&gt;, zero re-exploration&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Task 3 → Task 4&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;4× more output per credit&lt;/strong&gt; — the site, format, and workflow were already known&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The shape is the important part, not the exact multiples. On a stateless platform, runs two through four look identical to run one. On a compounding one, the curve bends. If most of your automatable work is recurring, that bend is the entire value proposition.&lt;/p&gt;

&lt;h2&gt;
  
  
  A migration path that won't burn a week
&lt;/h2&gt;

&lt;p&gt;The mistake I made first was trying to move a complex, high-stakes workflow over immediately. Don't. Here's the order that actually works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Pick a low-risk, verifiable task.&lt;/strong&gt; Something you do weekly, where you can eyeball whether the output is correct in under a minute. Competitor monitoring is a good first candidate. Anything that triggers a payment, sends an email, or touches production is a bad one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Run it manually one more time and time it.&lt;/strong&gt; You need a real baseline number. Without it, you'll never know whether the automation actually saved anything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Automate just the collection, keep the judgment.&lt;/strong&gt; Let the agent pull and structure the data. You review it. Don't automate the decision in week one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Run it twice more before trusting it.&lt;/strong&gt; Watch for silent partial failures. Compare run three to run one — on a compounding platform, run three should be faster and cheaper. That delta tells you whether you picked the right kind of tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Only then, expand scope.&lt;/strong&gt; Add steps, add sources, or move to a higher-stakes workflow once the first one has earned your trust over several clean runs.&lt;/p&gt;

&lt;h2&gt;
  
  
  So, should you switch?
&lt;/h2&gt;

&lt;p&gt;The honest answer is: it depends on one ratio. What percentage of your automatable work is recurring — same sources, same format, repeated on a cadence?&lt;/p&gt;

&lt;p&gt;If it's low, any competent stateless platform will do, and you should optimize for single-task quality and flexibility. If it's high — and for most developers drowning in monitoring and collection work, it is — the compounding architecture is where the real savings live, and it's worth running the 30-day test to see the cost curve bend for yourself.&lt;/p&gt;

&lt;p&gt;Either way, the meta-point stands: the six hours a week of runbook-following work is a bad use of a developer. Moving it onto an agent isn't about chasing novelty. It's about getting the runbook-following off your plate so you can go back to writing the runbooks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Written by the AllyHub team. If you're evaluating a specific workflow type for migration, drop it in the comments and I'll share what I've seen work and what I've seen break.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Developers Are Switching from Self-Hosted AI Agents to Cloud Workspaces</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sun, 21 Jun 2026 10:34:48 +0000</pubDate>
      <link>https://dev.to/douzatan/why-developers-are-switching-from-self-hosted-ai-agents-to-cloud-workspaces-cj6</link>
      <guid>https://dev.to/douzatan/why-developers-are-switching-from-self-hosted-ai-agents-to-cloud-workspaces-cj6</guid>
      <description>&lt;p&gt;Self-hosting an AI agent on your own box is a great weekend project and a genuinely educational one. But once the agent stops being a toy and starts doing daily work — running a real shell, cloning repos, driving a browser, surviving reboots — the box becomes a second job. A lot of us are moving the &lt;em&gt;runtime&lt;/em&gt; to a cloud agent workspace and keeping the &lt;em&gt;control&lt;/em&gt; on our laptop. This is a field report on why, what actually breaks, and what you trade away.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu9n1jfblca73weytiiym.jpeg" 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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu9n1jfblca73weytiiym.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The setup that everyone starts with
&lt;/h2&gt;

&lt;p&gt;You've seen this story because you've lived it. You spin up a self-hosted agent — let's call the archetype OpenClaw, the kind of local-first setup people run on a spare Mac Mini or a Linux box in the closet. You give it shell access, a workspace folder, an API key, and a system prompt. The first week is magic. It writes a script, runs it, reads the error, fixes the script. You feel like you've cheated the universe.&lt;/p&gt;

&lt;p&gt;I ran exactly this for months and I still think it's one of the best ways to actually &lt;em&gt;understand&lt;/em&gt; how agents behave. You see every tool call. The data never leaves your hardware. You can patch the agent loop live because it's right there in your editor. For a single developer who likes control, local-hosted agents are legitimately good, and I'm not going to pretend otherwise.&lt;/p&gt;

&lt;p&gt;The trouble starts when the agent gets useful enough that you want it running &lt;em&gt;all the time&lt;/em&gt;, doing work you actually depend on. That's when "my agent lives on a machine in my apartment" stops being a feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the self-hosted dream starts leaking
&lt;/h2&gt;

&lt;p&gt;None of these are dealbreakers in isolation. Together they're a slow tax on your attention.&lt;/p&gt;

&lt;h3&gt;
  
  
  Your laptop is now infrastructure
&lt;/h3&gt;

&lt;p&gt;The moment an agent needs a real shell, a persistent filesystem, and a browser, it needs a machine that's &lt;em&gt;up&lt;/em&gt;. Self-hosting means that machine is yours. You close the lid, the long-running task dies. You reboot for an OS update, the agent's half-finished &lt;code&gt;npm install&lt;/code&gt; is gone. You travel and your home IP changes, and now the webhook you set up for a chat integration silently stops firing.&lt;/p&gt;

&lt;p&gt;I started keeping a literal checklist of "things that must be running for my agent to work": the agent process, a reverse tunnel so I could reach it from my phone, a headless browser with the right Chromium flags, a cron job to restart everything when it OOM'd. That checklist is the smell. When the supporting cast outgrows the actor, something is wrong.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dependency hell, but for the agent
&lt;/h3&gt;

&lt;p&gt;A capable agent needs to do capable things: run Playwright, build a Docker image, install system packages, manage a Python virtualenv that doesn't collide with the three other ones on your machine. So your agent's environment starts colliding with &lt;em&gt;your&lt;/em&gt; environment. I bricked my local Node version once because the agent "helpfully" ran a global install. The agent and the host fighting over the same &lt;code&gt;/usr/local&lt;/code&gt; is a special kind of frustrating, because now you're debugging two things that both think they're in charge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser automation on a personal machine is jank
&lt;/h3&gt;

&lt;p&gt;If the agent needs to browse — fill a form, scrape a dashboard, click through an OAuth flow — you're running a headless or headful browser on your laptop. It steals focus. It pops windows. It needs a display server you don't have on a remote box. You end up babysitting Chromium flags and &lt;code&gt;xvfb&lt;/code&gt; instead of doing the actual work the agent was supposed to free you up for.&lt;/p&gt;

&lt;h3&gt;
  
  
  "Memory" that isn't memory
&lt;/h3&gt;

&lt;p&gt;Most DIY setups treat the chat log as the agent's memory. It is not. Restart the process and the agent forgets the architecture decision you made on Tuesday. You can bolt on a vector store, sure, but now you're operating a database too. The thing you wanted was an employee with a filing cabinet. What you built was a goldfish with a transcript.&lt;/p&gt;

&lt;h3&gt;
  
  
  Security is entirely your problem
&lt;/h3&gt;

&lt;p&gt;An agent with shell access is, by design, a remote-code-execution machine you invited in. On your own hardware that blast radius includes your SSH keys, your &lt;code&gt;~/.aws/credentials&lt;/code&gt;, your browser cookies. Sandboxing it properly — separate user, container, network egress rules — is real work, and most weekend setups skip it. I know mine did for far too long.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "cloud workspace" actually means (and what it doesn't)
&lt;/h2&gt;

&lt;p&gt;When I say cloud workspace I do not mean "a chatbot in a browser tab." That's the thing people assume and it's the wrong mental model. A chatbot answers; a workspace &lt;em&gt;works&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The shape that's winning is closer to this: a cloud-hosted, isolated runtime where the agent gets a &lt;strong&gt;real terminal&lt;/strong&gt;, a &lt;strong&gt;real git surface&lt;/strong&gt; with diffs and branches and rollback, an &lt;strong&gt;AI-controlled browser&lt;/strong&gt; that runs server-side, and a &lt;strong&gt;persistent file drive&lt;/strong&gt; that survives every restart — all behind a UI you watch from your laptop without hosting any of it. You keep the steering wheel; the engine moves off your hardware.&lt;/p&gt;

&lt;p&gt;The platform I've been using for this, &lt;a href="https://buda.im/" rel="noopener noreferrer"&gt;Buda&lt;/a&gt;, frames it with a company analogy that finally made the architecture click for me. An &lt;strong&gt;Agent&lt;/strong&gt; is an employee. Its &lt;strong&gt;Drive&lt;/strong&gt; is the filing cabinet — durable, the actual long-term memory, not a chat scrollback. A &lt;strong&gt;Session&lt;/strong&gt; is a meeting room: isolated short-term context you can spin up and throw away. And a &lt;strong&gt;Space&lt;/strong&gt; is the office: the org boundary where billing, members, and shared storage live. Under the hood, the compute layer (they call it Claw Computer) hands each agent an isolated, durable runtime, and a scheduling layer decides what runs when. The point of naming all that isn't branding — it's that the runtime is a real system, not a wrapper around a model API.&lt;/p&gt;

&lt;p&gt;That last distinction is the whole migration in one sentence. Self-hosted setups are usually a &lt;em&gt;model wrapper plus your hardware&lt;/em&gt;. A workspace is &lt;em&gt;a runtime plus a filesystem plus tools&lt;/em&gt;, and the hardware is somebody else's problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The day-to-day wins, concretely
&lt;/h2&gt;

&lt;p&gt;Let me skip the brochure language and tell you what actually changed in my week.&lt;/p&gt;

&lt;h3&gt;
  
  
  Long-running tasks just keep running
&lt;/h3&gt;

&lt;p&gt;I kick off a task — "clone this repo, run the test suite across these three branches, summarize the failures into a Drive file" — and then I close my laptop and get on a train. The agent's runtime is in the cloud, so the work doesn't care that my client went to sleep. I reconnect later and read the diff. With my self-hosted version, that exact workflow required my machine to stay awake, plugged in, and online for the duration. Now it's just... a thing that happened while I was away.&lt;/p&gt;

&lt;h3&gt;
  
  
  The terminal and git are first-class, not bolted on
&lt;/h3&gt;

&lt;p&gt;The single feature I underrated was a &lt;strong&gt;visual git tab&lt;/strong&gt; sitting on top of the agent's real working directory. The agent makes changes, I see the commits and diffs, I can branch or roll back. It turns "trust the agent's edits" into "review the agent's PR," which is the same instinct I'd apply to a human teammate. Pair that with a live shell I can drop into mid-task, and the workspace stops being a black box.&lt;/p&gt;

&lt;p&gt;A rough sketch of how a session feels:&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;# In the agent's cloud terminal — same shell the agent uses&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git clone https://github.com/acme/api.git &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;cd &lt;/span&gt;api
&lt;span class="nv"&gt;$ &lt;/span&gt;npm ci &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;test&lt;/span&gt;           &lt;span class="c"&gt;# agent runs this, I watch it stream&lt;/span&gt;
&lt;span class="c"&gt;# ...agent reads failures, edits files, commits...&lt;/span&gt;
&lt;span class="nv"&gt;$ &lt;/span&gt;git log &lt;span class="nt"&gt;--oneline&lt;/span&gt; &lt;span class="nt"&gt;-3&lt;/span&gt;
a1c2e4f  fix: handle null token &lt;span class="k"&gt;in &lt;/span&gt;auth middleware
9f3b1d0  &lt;span class="nb"&gt;test&lt;/span&gt;: add regression &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;expired session
3e8a0c2  chore: bump supertest to 7.x
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I didn't install Node. I didn't manage the virtualenv. The &lt;code&gt;node_modules&lt;/code&gt; and the repo live on a high-performance volume in the workspace, not eating my laptop's SSD.&lt;/p&gt;

&lt;h3&gt;
  
  
  Browser work moves off my screen
&lt;/h3&gt;

&lt;p&gt;The agent's browser runs server-side, streamed back to a tab I can watch. No focus-stealing, no &lt;code&gt;xvfb&lt;/code&gt;, no Chromium flag archaeology. When I need to see what it's doing — say, debugging a flaky scrape — I watch the AI browser live instead of fighting a headless instance on my own machine.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory that's actually a filesystem
&lt;/h3&gt;

&lt;p&gt;Because the Drive is the durable layer, "remember our deployment runbook" means the agent writes a file, and that file is there next week, next session, and for any teammate in the same Space. I stopped pasting the same context into every conversation. The habit that matters: &lt;em&gt;if it should survive the session, it goes to Drive.&lt;/em&gt; Chat is the meeting; Drive is the cabinet.&lt;/p&gt;

&lt;h3&gt;
  
  
  It's a team thing, not a single-player thing
&lt;/h3&gt;

&lt;p&gt;This is the part self-hosting structurally can't match without you becoming an ops team. A workspace lives in a Space with members, shared storage, and shared credentials. When a coworker needs the same agent, I add them to the Space — I don't ship them a Docker image and a setup README and then spend an afternoon on a debugging call. And the same agent can answer from a web widget, Slack, Telegram, Discord, or an OpenAPI endpoint without me standing up a server for each one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest trade-offs
&lt;/h2&gt;

&lt;p&gt;I'd be lying if I said this is a free lunch. A migration piece that only lists wins is marketing, so here's the other column.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You give up some control.&lt;/strong&gt; It's not your kernel. If you're the kind of developer who wants to patch the agent loop or run a fully air-gapped model, a managed workspace will feel like a cage. (Enterprise/self-host options exist for the data-residency crowd, but that's a different conversation than "my Mac Mini.")&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data leaves your hardware.&lt;/strong&gt; For a lot of work that's fine — encrypted in transit and at rest, not shared with third parties — but if your threat model says "nothing leaves the building," local-first still wins. Be honest about which camp you're in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It costs money.&lt;/strong&gt; Self-hosting feels free because you already own the laptop and you're not pricing your own time. A cloud workspace has a line item. Most platforms — Buda included — have a free tier to kick the tires, with paid plans unlocking the heavier tools and storage; check the live pricing page before you budget, because tiers move.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cold-start learning.&lt;/strong&gt; The mental model (Spaces, Agents, Drives, Sessions, Channels) is a small upfront tax. It paid off for me within a day, but it's not zero.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to decide, without overthinking it
&lt;/h2&gt;

&lt;p&gt;A quick gut check I'd give a friend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Stay self-hosted if:&lt;/strong&gt; it's a single-user hobby, the data genuinely cannot leave your machine, you enjoy the tinkering as an end in itself, or you need to hack the agent internals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to a cloud workspace if:&lt;/strong&gt; the agent is doing work you depend on daily, tasks run longer than your laptop stays awake, more than one person needs it, or you've caught yourself maintaining infrastructure that exists &lt;em&gt;only&lt;/em&gt; to keep the agent alive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That last bullet is the real signal. The day I realized I was spending more time keeping the agent's home alive than getting value out of the agent, the decision made itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  A pragmatic migration path
&lt;/h2&gt;

&lt;p&gt;You don't have to rip anything out on day one. What worked for me:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Pick one annoying recurring task&lt;/strong&gt; — the one whose failures you're tired of. Mine was "run the integration suite and triage failures."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recreate just that workflow&lt;/strong&gt; in a cloud workspace. One agent, the files it needs in its Drive, the repo cloned into the workspace.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run both in parallel for a week.&lt;/strong&gt; Let the self-hosted version and the cloud one do the same job. You'll feel the difference in maintenance overhead immediately.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move the durable knowledge to Drive&lt;/strong&gt; — runbooks, SOPs, the context you were re-pasting every time. This is the step that makes the agent feel like it has continuity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connect a channel last.&lt;/strong&gt; Once the agent is solid, expose it where your team already is (Slack, a web widget, whatever) instead of building a delivery mechanism yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep your self-hosted rig around. It's a great lab, and you'll want it the next time you're learning how some new agent capability actually works under the hood. The migration isn't "local is bad." It's "stop making your laptop the production environment for something that's become production."&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottom line
&lt;/h2&gt;

&lt;p&gt;The shift isn't really about cloud versus local as an ideology. It's about where the &lt;em&gt;runtime&lt;/em&gt; should live once an agent crosses the line from experiment to dependency. Self-hosting keeps that runtime — and all of its babysitting — on you. A cloud workspace moves the terminal, the git surface, the browser, and the persistent memory off your hardware, and hands you a window to watch and steer through.&lt;/p&gt;

&lt;p&gt;I still love the self-hosted version for what it taught me. I just don't want it to be the thing standing between me and shipping. If your agent has graduated from "cool demo" to "I rely on this," it's probably time to let something else keep the machine alive while you go do the work.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AI Agent Platforms Compared: What to Look for in 2026</title>
      <dc:creator>douzatan</dc:creator>
      <pubDate>Sun, 14 Jun 2026 17:01:14 +0000</pubDate>
      <link>https://dev.to/douzatan/ai-agent-platforms-compared-what-to-look-for-in-2026-57cp</link>
      <guid>https://dev.to/douzatan/ai-agent-platforms-compared-what-to-look-for-in-2026-57cp</guid>
      <description>&lt;p&gt;Most "AI agent platform" pitches in 2026 collapse into the same demo: a model, a loop, and a browser clicking around. That tells you almost nothing about whether the thing will survive contact with your team. The questions that actually predict success are boring and structural — where does memory live, what runtime executes the work, what real tools can the agent reach, can two agents hand off, and how does pricing scale when usage isn't a straight line. This is a checklist you can run any vendor (or your own homegrown setup) through before you commit. I'll use a self-hosted setup I'll call OpenClaw and a cloud-native platform as two ends of the spectrum, because the trade-off between them is the decision most teams are actually making.&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%2Fy6ocfmg8yueq0h7l4bul.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%2Fy6ocfmg8yueq0h7l4bul.png" alt=" " width="799" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "compare the models" is the wrong frame
&lt;/h2&gt;

&lt;p&gt;If you've evaluated more than two agent platforms, you already know the demos are nearly identical. Someone types a prompt, an agent spins up, a browser opens, a file gets written, applause. The model underneath is almost a commodity — you can swap GPT-class, Claude-class, and open-weight models in and out, and for most workflows the differences wash out within a quarter.&lt;/p&gt;

&lt;p&gt;So the model is not the moat. The platform around the model is. And the platform is where every painful surprise lives three months in: the agent forgot the thing it learned last week, the runtime can't actually run your build, there's no way for the "research agent" to hand findings to the "writer agent," and your bill went sideways because pricing was metered on something you couldn't predict.&lt;/p&gt;

&lt;p&gt;The checklist below is organized around the six dimensions that have actually broken deployments I've watched: memory, runtime, tools, collaboration, channels, and pricing. Run each candidate through all six. A platform that's brilliant on five and broken on one will still hurt.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Memory: where does the agent's knowledge actually live?
&lt;/h2&gt;

&lt;p&gt;This is the single most under-asked question, and it's the one that determines whether your agent gets smarter or just chattier over time.&lt;/p&gt;

&lt;p&gt;There are roughly three memory models out there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Context-window memory.&lt;/strong&gt; The "memory" is whatever fits in the prompt. Once the conversation scrolls, it's gone. Fine for one-shot tasks, useless for anything an agent should learn from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Vector-store memory.&lt;/strong&gt; Embeddings of past chats, retrieved on similarity. Better, but it's lossy and opaque — you can't open it, audit it, or correct a specific fact. When it retrieves the wrong thing, you debug a black box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File-grounded memory.&lt;/strong&gt; The agent's durable knowledge is real files it reads and writes — SOPs, policies, prior outputs, research — and you can open, version, and correct them like any document.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Questions to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can I &lt;strong&gt;open and edit&lt;/strong&gt; what the agent "knows," or is it locked in an embedding store?&lt;/li&gt;
&lt;li&gt;Is chat history treated as durable knowledge (a trap) or as transient context that must be saved somewhere durable to persist?&lt;/li&gt;
&lt;li&gt;When the agent learns something useful in one session, how does the next session see it?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where the design philosophy of a platform like &lt;a href="https://buda.im/" rel="noopener noreferrer"&gt;Buda&lt;/a&gt; is worth studying even if you don't adopt it: it's explicitly &lt;em&gt;Drive-based&lt;/em&gt;, meaning each agent has a file cabinet (the Drive) that holds its long-term knowledge, and the platform's whole mental model assumes chat history is &lt;em&gt;not&lt;/em&gt; durable knowledge — important context gets written to files on purpose. That's a strong opinion, and it's the right one for teams: it makes memory inspectable and ownable instead of a mystery embedding blob. Whatever you pick, push for this property. You want to be able to answer "why did the agent say that?" by opening a file, not by re-running a retrieval and hoping.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Runtime: what actually executes the work?
&lt;/h2&gt;

&lt;p&gt;A lot of "agents" are a thin orchestration loop that calls APIs. The moment a task needs to &lt;em&gt;run&lt;/em&gt; something — clone a repo, install dependencies, execute a script, build a site — you find out whether there's a real computer behind the agent or just a chat box with delusions of competence.&lt;/p&gt;

&lt;p&gt;The two ends of the spectrum:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Self-hosted / local-hardware (the OpenClaw style).&lt;/strong&gt; You run the agent on your own machine — a Mac Mini in the closet, a workstation, a box you control. The appeal is real and I don't want to undersell it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your data never leaves your hardware.&lt;/li&gt;
&lt;li&gt;No per-seat cloud bill; you've already paid for the silicon.&lt;/li&gt;
&lt;li&gt;Total control, full hacker-friendliness, and you can poke at every layer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The costs are equally real: &lt;em&gt;you&lt;/em&gt; are now ops. You patch it, you keep it online, you deal with the noisy neighbor when a build pegs the CPU, and "scaling" means buying more hardware. It's single-machine by nature, which makes it a fantastic personal setup and an awkward team one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud-native sandbox.&lt;/strong&gt; The runtime is an isolated, durable cloud environment the agent owns. No hardware to buy or babysit; the platform handles isolation, persistence, and scale.&lt;/p&gt;

&lt;p&gt;The questions that separate a real runtime from a wrapper:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a &lt;strong&gt;real shell&lt;/strong&gt; the agent (and I) can use, or just function calls?&lt;/li&gt;
&lt;li&gt;Can it do &lt;strong&gt;Git-heavy work&lt;/strong&gt; — clone, branch, diff, commit, roll back — with sane storage for &lt;code&gt;node_modules&lt;/code&gt; and friends?&lt;/li&gt;
&lt;li&gt;Can I &lt;strong&gt;watch and intervene&lt;/strong&gt; while it works, or is it a fire-and-forget black box?&lt;/li&gt;
&lt;li&gt;Does the environment &lt;strong&gt;persist&lt;/strong&gt; between runs, or do I rebuild state every time?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On the cloud-native side, the architecture detail worth asking about is the separation between a compute layer and a scheduling layer. Buda, for instance, splits these explicitly — a compute layer (it calls it Claw Computer) that provides the isolated, durable runtime, and a scheduling layer (Buda Organizer) that decides what runs when. That separation is what lets it be "an agent runtime plus workspace system" rather than a model wrapper, and it's a useful test to apply to anyone: &lt;em&gt;is your runtime a first-class system, or an afterthought bolted onto a chat UI?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For a self-hosted setup, you get the runtime by definition — it's your box. The trade is operational burden vs. convenience, not capability vs. toy.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Tools: can the agent touch the real world?
&lt;/h2&gt;

&lt;p&gt;An agent that can only talk is a chatbot. An agent that can &lt;em&gt;act&lt;/em&gt; needs a toolbelt, and the depth of that toolbelt is where platforms diverge hard.&lt;/p&gt;

&lt;p&gt;The baseline you should expect in 2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Browser&lt;/strong&gt; — and ideally two modes: an AI-controlled browser running in the sandbox (for automation, scraping, form-filling) and a passive viewer for previewing internal tools or localhost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminal&lt;/strong&gt; — a real shell, not a sandboxed echo of one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Git&lt;/strong&gt; — with visual diffs, branches, and rollback, because an agent that writes code without version control is a liability.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HTTP / OpenAPI&lt;/strong&gt; — so the agent can call your existing APIs instead of you wrapping everything by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nice-to-haves that signal a serious platform:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;VS Code Remote SSH&lt;/strong&gt; into the agent's environment, so a human can drop in and fix things directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;WebPreview&lt;/strong&gt; — expose a localhost app inside the sandbox as a shareable preview URL.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;retrieval tool that reads messy formats&lt;/strong&gt; — PDFs, images, spreadsheets, video — not just plain text.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A quick sniff test I use. Ask the vendor to do this live:&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;# Clone something real, build it, and serve a preview.&lt;/span&gt;
git clone https://github.com/some/real-repo.git
&lt;span class="nb"&gt;cd &lt;/span&gt;real-repo &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; npm run build
&lt;span class="c"&gt;# ...then expose the running app as a preview URL I can open.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the agent can run that end to end — clone, install, build, preview — and show you the diffs along the way, it has a real runtime and a real toolbelt. If it stalls at &lt;code&gt;npm install&lt;/code&gt; or can't surface a preview URL, you've got a demo, not a platform. Self-hosted setups usually pass this test (it's your machine, of course it can build) but may lack the polished workspace surfaces — visual Git, in-browser IDE, hosted previews — that make a &lt;em&gt;team&lt;/em&gt; productive rather than just one tinkerer.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Collaboration: one agent or a workforce?
&lt;/h2&gt;

&lt;p&gt;Single-agent tools are everywhere. The interesting question for 2026 is whether the platform treats agents as a team.&lt;/p&gt;

&lt;p&gt;Two layers matter here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Multi-agent orchestration.&lt;/strong&gt; Can a research agent hand its findings to a writer agent, who hands a draft to a reviewer agent? Real workflows are pipelines, not monologues. Look for first-class support for agents with distinct roles, instructions, and skills that pass work between each other — not just a single mega-prompt pretending to be five specialists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Human collaboration.&lt;/strong&gt; This is where self-hosted setups tend to show their seams. A box under your desk is implicitly single-user. Team platforms need an org boundary — shared storage, shared billing, member permissions, and a way to scope which humans can manage which agents.&lt;/p&gt;

&lt;p&gt;Buda's model is a clean example of thinking about this up front: it borrows a company metaphor — a &lt;em&gt;Space&lt;/em&gt; is the org/office (members, permissions, billing, shared storage), an &lt;em&gt;Agent&lt;/em&gt; is an employee, a &lt;em&gt;Team&lt;/em&gt; is a group of agents that hand work off to each other, and a &lt;em&gt;Session&lt;/em&gt; is a temporary workbench. You don't have to adopt that exact vocabulary, but you should demand the &lt;em&gt;capabilities&lt;/em&gt; it encodes: shared knowledge, role separation, permissioned membership, and agent-to-agent handoff. If a platform can't tell you how two agents collaborate or how three teammates share one agent's knowledge, it's a personal tool wearing an enterprise hat.&lt;/p&gt;

&lt;p&gt;Questions to ask:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Can agents hand off tasks to each other with separate roles and skills?&lt;/li&gt;
&lt;li&gt;Is there a real org/permission boundary, or is "the team" just everyone sharing one login?&lt;/li&gt;
&lt;li&gt;Is knowledge shared at the org level, or trapped per-user?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Channels: how do humans reach the agent?
&lt;/h2&gt;

&lt;p&gt;An agent nobody can talk to from where they already work is shelfware. By 2026, "channel-connected" should be table stakes, but the &lt;em&gt;quality&lt;/em&gt; of that connection varies a lot.&lt;/p&gt;

&lt;p&gt;What to check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Which surfaces?&lt;/strong&gt; Web is the floor. Real platforms reach Slack, WhatsApp, Telegram, Discord, Microsoft Teams, and regional players like Feishu/Lark and WeCom. Buda supports that whole spread plus OpenAPI, which matters if your users live in chat, not in your app.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session isolation per channel.&lt;/strong&gt; This is the one people forget until it bites. If your support agent serves customers over WhatsApp, each phone number &lt;em&gt;must&lt;/em&gt; get its own isolated session — one user's history leaking into another's is a privacy incident, not a bug. Ask explicitly how the platform scopes sessions per user, per DM, per group.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Channels are entry points, not memory.&lt;/strong&gt; A subtle but important framing: a channel is a doorway, not a filing cabinet. Durable knowledge belongs in the memory layer (see point 1); the channel just routes messages. Platforms that conflate the two tend to lose context the moment you switch surfaces.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a self-hosted/local setup, channel integrations are usually DIY — you can wire up a Telegram bot in an afternoon, but multi-channel, isolated-session, always-on routing is a project you now own and maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Pricing: does the model survive real usage?
&lt;/h2&gt;

&lt;p&gt;Pricing is where evaluations go to die, because the sticker price is rarely the real cost. Three things to pin down:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's the billable unit, and can you predict it?&lt;/strong&gt; Per-seat is predictable but punishes large teams. Per-token is honest but volatile — a single agent that gets chatty on a long task can spike your bill. Some platforms (Buda among them) use a composite "credits" unit that bundles model calls and third-party API usage; that's neither tokens nor currency, so you'll want to model it against &lt;em&gt;your&lt;/em&gt; real workloads before trusting any monthly estimate. The point isn't which unit is "best" — it's whether you can forecast it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-what does it scale?&lt;/strong&gt; Per user, per agent, or per workspace? Buda, for example, bills &lt;em&gt;per Space&lt;/em&gt; (its org unit), not per human seat, and charges per purchased agent — so one Space with many human members on a few agents costs differently than a seat-based tool would. That can be cheaper or pricier depending on your shape; the lesson is to map &lt;em&gt;your&lt;/em&gt; org onto the billing unit, not the vendor's example org.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where do the gated features sit?&lt;/strong&gt; The expensive capabilities — Browser, Terminal, Git, scheduled automations, high-performance SSD storage — are often paywalled above the free tier. A rough public-pricing read for the cloud-native end of the market, using Buda's published tiers as a concrete reference:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tier&lt;/th&gt;
&lt;th&gt;Price (per docs)&lt;/th&gt;
&lt;th&gt;What you typically get&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Free&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;Limited daily credits, limited storage; advanced runtime tools usually not included&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plus&lt;/td&gt;
&lt;td&gt;$20 / agent / mo&lt;/td&gt;
&lt;td&gt;Monthly credits per agent; Browser, Terminal, Git, automations&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pro&lt;/td&gt;
&lt;td&gt;$100 / agent / mo&lt;/td&gt;
&lt;td&gt;More credits/storage; adds high-performance SSD&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise&lt;/td&gt;
&lt;td&gt;Custom&lt;/td&gt;
&lt;td&gt;Custom limits, self-host / on-prem, controls&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Always confirm current numbers on the live pricing page — tiers move. For the self-hosted/OpenClaw end, the "pricing" is your hardware plus your time: a one-time-ish capital cost and an ongoing ops tax that doesn't show up on any invoice but is very real.&lt;/p&gt;

&lt;h2&gt;
  
  
  A scorecard you can actually use
&lt;/h2&gt;

&lt;p&gt;Here's the checklist compressed into something you can paste into a doc and fill in per vendor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Platform: ____________________

[ ] Memory      — Inspectable/editable? File-grounded vs vector blob?
[ ] Runtime     — Real shell + Git? Persistent? Can I watch/intervene?
[ ] Tools       — Browser / Terminal / Git / OpenAPI present and working?
[ ] Collab       — Multi-agent handoff? Real org + permission boundary?
[ ] Channels    — Slack/WA/Teams/etc.? Per-user session isolation?
[ ] Pricing     — Billable unit predictable? Scales per what? Gated features?

Self-host vs cloud trade I'm accepting: ____________________
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How to actually decide
&lt;/h2&gt;

&lt;p&gt;The honest answer is that there's no universally "best" platform — there's a best &lt;em&gt;fit&lt;/em&gt; for where your team sits on the control-vs-convenience axis.&lt;/p&gt;

&lt;p&gt;Lean self-hosted (OpenClaw-style) if you're a solo developer or a small, technical team that wants data on your own hardware, enjoys owning the stack, and runs mostly single-user workflows. You're trading convenience for control, and that's a perfectly good trade when you have the skills and the appetite for ops.&lt;/p&gt;

&lt;p&gt;Lean cloud-native (Buda-style) if you've got a &lt;em&gt;team&lt;/em&gt; that needs shared knowledge, multiple agents handing off work, agents reachable from chat channels with proper session isolation, and you'd rather not run infrastructure. You're trading some control for a workspace that scales without you racking hardware — and you get persistent file-based memory and a real runtime without building either yourself.&lt;/p&gt;

&lt;p&gt;Whichever way you lean, run the six-dimension checklist before you sign anything. The flashy demo will pass; it always does. What you're really buying is the boring stuff — memory you can audit, a runtime that actually runs, tools that touch reality, collaboration that scales past one person, channels with clean isolation, and pricing you can forecast. Get those six right and the model underneath barely matters. Get them wrong and no model will save you.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Suggested tags: ai, agents, devops, architecture&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>devops</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
