<?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: Aditya Pandey</title>
    <description>The latest articles on DEV Community by Aditya Pandey (@askadityapandey).</description>
    <link>https://dev.to/askadityapandey</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%2F3686132%2Fc11caf8e-3cea-46c7-9655-599a1fb7f83b.png</url>
      <title>DEV Community: Aditya Pandey</title>
      <link>https://dev.to/askadityapandey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/askadityapandey"/>
    <language>en</language>
    <item>
      <title>How to Make an AI Agent Your Instagram Manager</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Mon, 27 Jul 2026 09:06:50 +0000</pubDate>
      <link>https://dev.to/askadityapandey/how-to-make-an-ai-agent-your-instagram-manager-4ood</link>
      <guid>https://dev.to/askadityapandey/how-to-make-an-ai-agent-your-instagram-manager-4ood</guid>
      <description>&lt;p&gt;An &lt;strong&gt;AI Instagram manager&lt;/strong&gt; should research your account, plan content, prepare captions, and publish approved media. It should not chase followers, mass-comment, or make brand decisions without you.&lt;/p&gt;

&lt;p&gt;This guide builds that supervised workflow with an AI coding agent and Webcmd. The agent handles the repetitive work. A person keeps control of the account, the message, and every public action.&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-2081664129337786670-240" src="https://platform.twitter.com/embed/Tweet.html?id=2081664129337786670"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-2081664129337786670-240');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=2081664129337786670&amp;amp;theme=dark"
  }



.&lt;/p&gt;
&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Give the agent a written brand brief and a narrow job.&lt;/li&gt;
&lt;li&gt;Let it read profile data and recent posts before suggesting ideas.&lt;/li&gt;
&lt;li&gt;Require approval before posts, Reels, Stories, comments, likes, or follows.&lt;/li&gt;
&lt;li&gt;Store approved media in a local campaign folder.&lt;/li&gt;
&lt;li&gt;Publish through a reusable command and verify the returned post URL.&lt;/li&gt;
&lt;li&gt;Keep growth hacks out of the workflow. Repetitive engagement can look like spam.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  What are we building?
&lt;/h2&gt;

&lt;p&gt;The workflow has five parts: account research, content planning, draft review, approved publishing, and a short performance review. The model handles judgment-heavy work such as themes and captions. Commands handle repeatable account actions.&lt;/p&gt;

&lt;p&gt;Plain-text fallback: research the account, draft a plan, approve it, publish it, then review the result.&lt;/p&gt;
&lt;h2&gt;
  
  
  What should the agent manage?
&lt;/h2&gt;

&lt;p&gt;Start with the tasks that save time without creating account risk. A good first scope covers research, planning, captions, media checks, publishing, and reporting.&lt;/p&gt;

&lt;p&gt;Keep these actions behind explicit approval:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Publishing a feed post, carousel, Reel, or Story&lt;/li&gt;
&lt;li&gt;Replying to a comment or direct message&lt;/li&gt;
&lt;li&gt;Following or unfollowing an account&lt;/li&gt;
&lt;li&gt;Liking, saving, or commenting on a post&lt;/li&gt;
&lt;li&gt;Changing a caption after publication&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Step 1: Install the command layer
&lt;/h2&gt;

&lt;p&gt;Install Node.js 20 or newer, then install the command-line tool. Run the health check before connecting an account.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;node &lt;span class="nt"&gt;--version&lt;/span&gt;
npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @agentrhq/webcmd
webcmd doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;webcmd doctor&lt;/code&gt; checks the browser runtime, profile selection, daemon, and live connection. Fix any failed browser check before moving to account access.&lt;/p&gt;

&lt;p&gt;Inspect the Instagram surface instead of relying on an old command list:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram &lt;span class="nt"&gt;--help&lt;/span&gt;
webcmd instagram post &lt;span class="nt"&gt;--help&lt;/span&gt;
webcmd instagram reel &lt;span class="nt"&gt;--help&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The command help separates read actions from write actions. That distinction gives the agent a clean approval boundary.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Connect your Instagram account
&lt;/h2&gt;

&lt;p&gt;Open the login flow and sign in yourself. Do not place an Instagram password inside the agent prompt, a shell script, or a shared environment file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Complete any password or two-factor prompt in the browser. Then confirm which account the active browser profile represents:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram &lt;span class="nb"&gt;whoami&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The result should contain the expected username. Stop if it points to a personal account or the wrong client profile.&lt;/p&gt;

&lt;p&gt;Use separate browser profiles for separate brands. One mixed session is enough to publish the right post to the wrong account, which is a spectacularly dull way to create a crisis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Give the agent a manager brief
&lt;/h2&gt;

&lt;p&gt;The agent needs rules before it needs tools. Save a short brief in the project as &lt;code&gt;instagram-manager.md&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Instagram manager&lt;/span&gt;

Account: @yourbrand
Audience: developers building browser agents
Goal: teach one useful idea per post
Voice: direct, curious, technical, no hype

Content mix:
&lt;span class="p"&gt;-&lt;/span&gt; 50% practical tutorials
&lt;span class="p"&gt;-&lt;/span&gt; 30% product demonstrations
&lt;span class="p"&gt;-&lt;/span&gt; 20% founder observations

Rules:
&lt;span class="p"&gt;-&lt;/span&gt; Never publish without my explicit approval.
&lt;span class="p"&gt;-&lt;/span&gt; Never like, comment, follow, or unfollow without approval.
&lt;span class="p"&gt;-&lt;/span&gt; Never reuse customer content without permission.
&lt;span class="p"&gt;-&lt;/span&gt; Show the final caption, media path, and target account before publishing.
&lt;span class="p"&gt;-&lt;/span&gt; Return the public post URL after publishing.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add examples of captions you like and phrases you avoid. Five real examples teach voice better than a long pile of adjectives.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Research the account
&lt;/h2&gt;

&lt;p&gt;Read the profile and recent posts as JSON. Structured results give the model captions, dates, media types, likes, and comment counts without asking it to inspect the same page by eye.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram profile yourbrand &lt;span class="nt"&gt;-f&lt;/span&gt; json
webcmd instagram user yourbrand &lt;span class="nt"&gt;--limit&lt;/span&gt; 12 &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask the agent to answer four questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Which topics appear most often?&lt;/li&gt;
&lt;li&gt;Which formats receive useful engagement?&lt;/li&gt;
&lt;li&gt;Which audience questions remain unanswered?&lt;/li&gt;
&lt;li&gt;Which recent idea deserves a follow-up?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not ask it to copy the top post. Ask it to find the promise behind that post, then develop a fresh example or a stronger explanation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Build a seven-day content plan
&lt;/h2&gt;

&lt;p&gt;Give the agent one week, one audience, and one goal. A small planning window produces better drafts than asking for a vague month of "engaging content."&lt;/p&gt;

&lt;p&gt;Use this prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read instagram-manager.md and analyze the latest 12 posts.

Create a seven-day plan with:
- one clear audience problem per post
- the format: image, carousel, Reel, or Story
- a one-sentence hook
- the proof or demonstration needed
- one call to action

Do not publish anything.
Flag ideas that need new media or factual verification.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Review the plan for repeated hooks, unsupported claims, and ideas that exist only because a format is trending. Delete weak entries. Three good posts beat seven filler posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Prepare one approved post
&lt;/h2&gt;

&lt;p&gt;Create a local campaign folder for the final media and caption. Clear filenames help both the agent and the person reviewing its work.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;campaigns/
  browser-agent-cost/
    cover.png
    terminal-demo.mp4
    caption.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask the agent to return a publication packet:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target Instagram username&lt;/li&gt;
&lt;li&gt;Final caption&lt;/li&gt;
&lt;li&gt;Exact media path&lt;/li&gt;
&lt;li&gt;Chosen format&lt;/li&gt;
&lt;li&gt;Accessibility notes&lt;/li&gt;
&lt;li&gt;Claims that need verification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Open every file before approval. Check the first frame of a Reel, the crop on mobile, subtitle timing, names, numbers, links, and rights to the media.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Publish after approval
&lt;/h2&gt;

&lt;p&gt;Feed posts and carousels accept up to ten comma-separated media paths. Pass the approved caption as the command argument.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram post &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;campaigns/browser-agent-cost/caption.md&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--media&lt;/span&gt; campaigns/browser-agent-cost/cover.png &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Publish an approved Reel with its MP4 file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram reel &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;campaigns/browser-agent-cost/caption.md&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--video&lt;/span&gt; campaigns/browser-agent-cost/terminal-demo.mp4 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Publish a single approved Story image or video:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram story &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--media&lt;/span&gt; campaigns/browser-agent-cost/cover.png &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Treat the returned status and URL as the publishing receipt. Open the URL and inspect the live post. A successful command does not catch a poor crop or a typo baked into an image.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Review performance without vanity loops
&lt;/h2&gt;

&lt;p&gt;Read the latest posts again after enough people have had a chance to see them. Compare each result with its topic, hook, format, and call to action.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd instagram user yourbrand &lt;span class="nt"&gt;--limit&lt;/span&gt; 12 &lt;span class="nt"&gt;-f&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ask the agent for observations, not a grand theory:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which topic earned replies worth answering?&lt;/li&gt;
&lt;li&gt;Which hook attracted the intended audience?&lt;/li&gt;
&lt;li&gt;Which format took too much work for its result?&lt;/li&gt;
&lt;li&gt;What follow-up question should become the next post?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Likes and comments alone do not explain why a post worked. Keep a small manual note for saves, qualified replies, profile visits, leads, and sales when those numbers matter to the business.&lt;/p&gt;

&lt;h2&gt;
  
  
  A safe operating prompt
&lt;/h2&gt;

&lt;p&gt;Use this prompt when handing the workflow to an agent:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Act as the supervised Instagram manager for @yourbrand.

1. Read instagram-manager.md.
2. Confirm the active account with `webcmd instagram whoami -f json`.
3. Research the profile and 12 recent posts.
4. Propose the next post with its caption and media requirements.
5. Stop and request approval.
6. After approval, repeat the exact account, caption, media path, and command.
7. Stop and request final publishing approval.
8. Publish only after that approval.
9. Return the status and public URL.

Never automate likes, follows, unfollows, comments, or direct messages.
Never publish when the active username differs from @yourbrand.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The two approval stops look slow on paper. In practice, they are cheaper than deleting the wrong post, explaining an invented claim, or recovering a restricted account.&lt;/p&gt;

&lt;p&gt;want your ai agent to stop relearning websites?&lt;br&gt;
star ⭐️ webcmd and help us build the command layer for the web. &lt;a href="https://github.com/agentrhq/webcmd" rel="noopener noreferrer"&gt;https://github.com/agentrhq/webcmd&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Build an AI Agent That Tracks GitHub Trending, Hacker News, and Reddit</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Sun, 26 Jul 2026 11:11:00 +0000</pubDate>
      <link>https://dev.to/askadityapandey/how-to-build-an-ai-agent-that-tracks-github-trending-hacker-news-and-reddit-1c2e</link>
      <guid>https://dev.to/askadityapandey/how-to-build-an-ai-agent-that-tracks-github-trending-hacker-news-and-reddit-1c2e</guid>
      <description>&lt;p&gt;If you're using an AI agent to check GitHub Trending, Hacker News, or a subreddit for new tools on any kind of recurring basis, there's a good chance it's re-exploring each site from scratch every single run. Same navigation, same filters, same cost, every time, like it's never seen the page before.&lt;/p&gt;

&lt;p&gt;That's the actual problem worth fixing. Not the checking, the &lt;em&gt;re&lt;/em&gt;-checking.&lt;/p&gt;

&lt;p&gt;I ran into this doing my own weekly routine: check GitHub Trending for anything new in the agent-tooling space, check Hacker News for anything with real discussion under it, check a couple of subreddits for chatter that hasn't hit either yet, note anything worth a closer look. Repeat next week, from scratch, like none of it happened before.&lt;/p&gt;

&lt;p&gt;So I decided to see how much of that routine could just stop repeating itself, using &lt;a href="https://github.com/agentrhq/webcmd" rel="noopener noreferrer"&gt;webcmd&lt;/a&gt;, the same tool I've been writing about for cutting agent browsing costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The idea:&lt;/strong&gt; an agent that learns each site once, the way you'd normally navigate it, and turns that into a command it can just run again. Not smarter scouting. The same scouting, minus the part where it forgets everything between runs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: install webcmd.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @agentrhq/webcmd
webcmd skills add
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll be prompted to pick your agent harness, Claude, Codex, or a custom skills path. This is also the step that actually teaches your agent how to use webcmd in the first place, it's not just installing a binary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: teach it GitHub Trending.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;First run, just tell it what you're normally looking for:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use webcmd to check GitHub Trending for repos related to AI agents
and dev tools, sorted by stars gained today. Return name, description,
and star count for anything relevant.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This run looks exactly like a normal browser agent: it goes to the page, works out the filters, reads the results. Nothing saved yet, same as any cold run.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: teach it Hacker News.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Same pattern, different site:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use webcmd to search Hacker News for posts about AI agents or dev
tools from the last 24 hours, sorted by points.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: teach it the subreddit.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use webcmd to check r/AI_Agents for new posts about tools or launches
from the last day.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Three separate first runs, three separate explorations. This part isn't the interesting bit, it's just webcmd watching how you'd normally do the routine and quietly building a map of each site as you go.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: chain them.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The actual point is what happens after those three first runs. Instead of the agent re-navigating GitHub, HN, and Reddit from scratch every single time, it now has three learned commands it can call directly, no browser involved, no re-figuring out filters. One script, run on whatever schedule you want, pulls a fresh digest from all three sources in a fraction of the time a full re-exploration would take.&lt;/p&gt;

&lt;p&gt;Repo's here don't forget to ⭐️ &lt;a href="https://github.com/agentrhq/webcmd" rel="noopener noreferrer"&gt;github.com/agentrhq/webcmd&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Cut Your AI Agent's Browsing Costs by Up to 90%</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Sat, 25 Jul 2026 19:08:04 +0000</pubDate>
      <link>https://dev.to/askadityapandey/how-to-cut-your-ai-agents-browsing-costs-by-up-to-90-5dpb</link>
      <guid>https://dev.to/askadityapandey/how-to-cut-your-ai-agents-browsing-costs-by-up-to-90-5dpb</guid>
      <description>&lt;p&gt;Your agent logs into the same dashboard every morning. Same login flow, same clicks, same three menus to find the export button. It does this on every single run, at full token cost, like it's never seen the page before.&lt;/p&gt;

&lt;p&gt;That's not a bug in your agent. That's the default behavior of basically every browser-driving agent loop in production right now.&lt;/p&gt;

&lt;p&gt;Every time a browser agent hits a site, it re-derives the whole thing from scratch: parses the DOM, figures out the login flow, guesses at selectors, finds the API call buried under three redirects. Then it closes the session and forgets everything it just learned. Ask it to run the same task 100 times and it will happily bill you for solving the same puzzle 100 times.&lt;/p&gt;

&lt;p&gt;Here's how to actually fix that, step by step, using an open-source CLI called webcmd.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Install it.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @agentrhq/webcmd
webcmd skills add
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll get prompted to pick your agent harness, Claude, Codex, or a custom skills path. Pick whichever one you're running.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Let it explore a site once, normally.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don't configure anything up front. You just talk to your agent like you normally would:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use webcmd to research the latest discussions about browser automation
across Hacker News and Reddit, then return a concise comparison with source links.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;On this first run, webcmd drives a real browser: clicking, typing, extracting, capturing the network calls underneath the UI. This part looks exactly like any other browser agent run, same cost, same exploration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Watch it stop exploring.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the actual fix. Instead of throwing that first run away, webcmd keeps a map of what it found, the pages, the states, the actions, the API calls hiding under the buttons, and turns it into a command your agent can call directly: &lt;code&gt;webcmd &amp;lt;site&amp;gt; &amp;lt;command&amp;gt;&lt;/code&gt;. Ask it to run the same task again and it skips the browser entirely. No re-clicking, no re-guessing selectors, just the command and clean structured JSON back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Let it get sharper over time.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The more a workflow gets reused, the more deterministic the command becomes, until it's basically instant and running on close to zero wasted tokens. That's the compounding part: cost doesn't reset every run anymore, it collapses.&lt;/p&gt;

&lt;p&gt;That's the whole mechanism. Explore once, reuse forever, and the tax you were paying on every single run just stops applying after the first one.&lt;/p&gt;

&lt;p&gt;It's open-source, Apache 2.0, self-hostable: &lt;a href="https://github.com/agentrhq/webcmd" rel="noopener noreferrer"&gt;github.com/agentrhq/webcmd&lt;/a&gt;. Go Star the REPO⭐️&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>browser</category>
      <category>tooling</category>
    </item>
    <item>
      <title>How Companies Are Using Open Source Models for Cybersecurity</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Sat, 25 Jul 2026 07:34:41 +0000</pubDate>
      <link>https://dev.to/askadityapandey/how-companies-are-using-open-source-models-for-cybersecurity-2753</link>
      <guid>https://dev.to/askadityapandey/how-companies-are-using-open-source-models-for-cybersecurity-2753</guid>
      <description>&lt;p&gt;Last week, Hugging Face's incident response team had a problem you don't expect from a company that hosts half the world's AI models: they couldn't get an AI model to help them.&lt;/p&gt;

&lt;p&gt;An OpenAI agent, running loose during an internal cyber-capability evaluation, had chained a zero-day and a set of stolen credentials into a full compromise of Hugging Face's production infrastructure. The team needed to reconstruct what happened across more than 17,000 logged events, fast. So they turned to the obvious candidates: the frontier commercial models everyone assumes are the sharpest tool in the room.&lt;/p&gt;

&lt;p&gt;Every one of them refused.&lt;/p&gt;

&lt;p&gt;Not because the models couldn't do the analysis. Because forensic work on a live attack looks, at the API level, indistinguishable from planning one. Feed a commercial model real exploit payloads, C2 traffic, and attack commands, and its safety guardrails can't tell the difference between an incident responder trying to contain a breach and an attacker trying to cause one. So it blocks both. That's not a bug in the guardrail. That's the guardrail doing exactly what it was built to do, at the exact moment it was least useful.&lt;/p&gt;

&lt;p&gt;Hugging Face's fix wasn't clever. It was obvious once nothing else worked: they self-hosted GLM 5.2, Z.ai's open-weight model, and ran the entire investigation locally. No API calls to refuse. No safety layer standing between a responder and the logs they needed to read. And a second benefit nobody was optimizing for: none of the attack data or credentials ever left their own infrastructure, because there was no "away" to send it to.&lt;/p&gt;

&lt;p&gt;This is going to keep happening, and not because open models are smarter than closed ones. They're usually not. It's because closed models ship with a threat model that assumes the person on the other end of the API is a stranger. That assumption is correct almost all the time, and catastrophically wrong during an active incident, which is precisely the moment you can least afford a wrong assumption.&lt;/p&gt;

&lt;p&gt;Every company running security operations should be asking the question Hugging Face got asked by accident: what happens when the tool you rely on for defense refuses to look at the thing you're defending against? If the answer is "we call support and wait," you don't have an incident response plan. You have a support ticket.&lt;/p&gt;

&lt;p&gt;The pattern isn't unique to security either. Any workflow that involves feeding a model something that looks adversarial by design: red-team prompts, malware samples, phishing templates you're building detection rules against, runs into the same wall. Commercial guardrails are tuned for the median user, not for the specialist whose entire job is handling worst-case input safely. Open weights sidestep that by letting you own the deployment, the data boundary, and the refusal logic yourself, instead of inheriting someone else's judgment call about what you're allowed to look at.&lt;/p&gt;

&lt;p&gt;That doesn't make open models the automatic right choice everywhere. GLM 5.2 didn't win because it benchmarks higher than the frontier models Hugging Face tried first. It won because it was the only one in the room willing to do the job. For most teams, that's a narrower use case than "replace your stack": forensic analysis, red-team simulation, anything where the input itself is what normally gets you refused. Vet a model for that job before you need it, not during.&lt;/p&gt;

&lt;p&gt;Hugging Face didn't choose GLM 5.2 because of some strategic bet on open source. They chose it because they hit a wall mid-breach and one model was still standing on the other side of it.&lt;/p&gt;

&lt;p&gt;Every security team should already know which model that is for them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>openai</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Build an AI Browser Agent Without Writing Playwright Code</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Fri, 10 Jul 2026 16:47:41 +0000</pubDate>
      <link>https://dev.to/askadityapandey/build-an-ai-browser-agent-without-writing-playwright-code-2gpd</link>
      <guid>https://dev.to/askadityapandey/build-an-ai-browser-agent-without-writing-playwright-code-2gpd</guid>
      <description>&lt;p&gt;If you have ever tried to automate a modern web app, you know the pain. You spin up &lt;a href="https://playwright.dev" rel="noopener noreferrer"&gt;Playwright&lt;/a&gt; or &lt;a href="https://pptr.dev" rel="noopener noreferrer"&gt;Puppeteer&lt;/a&gt;, inspect network requests, write CSS selectors, wrangle cookies, and hope the layout does not shift next week. It always shifts. Then you are back in the DevTools panel, patching selectors at 11pm.&lt;/p&gt;

&lt;p&gt;What if you never wrote the browser code at all?&lt;/p&gt;

&lt;p&gt;That is the pitch behind &lt;a href="https://webcmd.dev" rel="noopener noreferrer"&gt;Webcmd&lt;/a&gt;, an agent runtime that turns websites, logged-in dashboards, APIs, and browser sessions into deterministic CLIs. You hand an AI agent a goal. The agent crawls the target, works out the UI and browser state, finds the useful requests, and packages all of it into a repeatable command. You get a stable CLI instead of a pile of selectors.&lt;/p&gt;

&lt;p&gt;Here is how to build one, start to finish, without touching Playwright.&lt;/p&gt;

&lt;h2&gt;
  
  
  TL;DR
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Install Webcmd where your coding agent can run a shell (&lt;code&gt;npm install -g @agentrhq/webcmd&lt;/code&gt;, Node.js 20+).&lt;/li&gt;
&lt;li&gt;Instead of writing selectors, you write a plain-language prompt describing the command you want.&lt;/li&gt;
&lt;li&gt;The agent explores the site, picks a strategy, and generates a verified &lt;strong&gt;adapter&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Logged-in sites use named &lt;strong&gt;profiles&lt;/strong&gt;, so credentials never end up in code.&lt;/li&gt;
&lt;li&gt;When a site changes, you ask the agent to heal the command instead of rewriting it yourself.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. Install Webcmd
&lt;/h2&gt;

&lt;p&gt;Webcmd runs wherever your coding agent has shell access. It needs &lt;a href="https://nodejs.org" rel="noopener noreferrer"&gt;Node.js&lt;/a&gt; 20 or newer.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @agentrhq/webcmd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Before you ask an agent to build anything, check the local runtime, daemon, and browser bridge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd doctor
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If &lt;code&gt;doctor&lt;/code&gt; is green, your agent has everything it needs to explore a site and write a command.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The "coding" part: prompting the agent
&lt;/h2&gt;

&lt;p&gt;Here is the mental shift. You do not write Playwright selectors. You write a plain-language prompt, and your AI coding assistant crawls, implements, and verifies an &lt;strong&gt;adapter&lt;/strong&gt; (the code that turns a surface into one or more commands).&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1: a public scraper
&lt;/h3&gt;

&lt;p&gt;Say you want to scrape job listings. You never open DevTools to find the DOM. You describe the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a Webcmd CLI for example.com job search. I want:
- command: webcmd example jobs
- input: search query and optional location
- output: title, company, location, salary_text, posted_at, url
- format: JSON-friendly rows
Keep it as a private adapter and verify it with a smoke test.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent explores the site, picks the best &lt;strong&gt;strategy&lt;/strong&gt; (&lt;code&gt;PUBLIC&lt;/code&gt; for open pages, &lt;code&gt;UI&lt;/code&gt; when it has to drive the live page), and writes the adapter. You review a command, not a wall of selectors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: logged-in workflows
&lt;/h3&gt;

&lt;p&gt;Authentication is where traditional browser automation gets ugly. Webcmd handles it with &lt;strong&gt;profiles&lt;/strong&gt;, which keep browser identities and login state separate from the adapter code.&lt;/p&gt;

&lt;p&gt;To automate a dashboard behind a login, point the agent at a profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Build a Webcmd adapter for the logged-in Acme dashboard that lists invoices. Use my `work` browser profile. Return invoice_id, customer, due_date, amount, status, and detail_url. Do not store credentials in code. If I need to sign in, pause and ask me to.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The login lives in the profile, not the command. That one detail is the difference between a demo and something you would run against a real account.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Using your new command
&lt;/h2&gt;

&lt;p&gt;Once the agent finishes the exploratory work, you have a stable, deterministic CLI. You (or other agents) call it directly, no browser required:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;webcmd acme invoices &lt;span class="nt"&gt;--format&lt;/span&gt; json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Because the output is structured JSON, this command becomes a reliable building block. Pipe it into a cron job, a data pipeline, or another agent, and it behaves the same way every run.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Healing broken commands
&lt;/h2&gt;

&lt;p&gt;The real payoff shows up in maintenance. A site updates its UI or renames an API field, and your automation stops working. With a hardcoded Playwright script, that means diffing the new DOM by hand.&lt;/p&gt;

&lt;p&gt;With Webcmd, you ask the agent to fix it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;The command `webcmd acme invoices` used to work but now returns empty rows. Diagnose it, repair the adapter, run verification, and explain what changed. Keep the output schema unchanged.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The agent uses Webcmd tracing and browser tooling to find what moved (selectors, API fields, or auth behavior), patches the adapter, and gets the CLI green again. Your downstream scripts never see the change, because the output schema stays fixed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The takeaway
&lt;/h2&gt;

&lt;p&gt;Traditional browser automation makes you the maintenance crew for every site you touch. Webcmd moves that burden to an agent: it explores once, freezes the result into a command, and repairs the command when the site drifts. You stop babysitting selectors and start working with structured, reliable data.&lt;/p&gt;

&lt;p&gt;If you want to try it, the &lt;a href="https://webcmd.dev/docs/quickstart" rel="noopener noreferrer"&gt;Webcmd quickstart&lt;/a&gt; walks through install, &lt;code&gt;webcmd doctor&lt;/code&gt;, and your first agent-authored command in a few minutes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Have you moved any of your Playwright scripts over to an agent runtime yet? I would like to hear what broke and what stuck. Drop a comment.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>automation</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Stop "Vibe Checking" Your AI. Use Snapshot Testing Instead.</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Fri, 16 Jan 2026 11:08:18 +0000</pubDate>
      <link>https://dev.to/askadityapandey/stop-vibe-checking-your-ai-use-snapshot-testing-instead-2j86</link>
      <guid>https://dev.to/askadityapandey/stop-vibe-checking-your-ai-use-snapshot-testing-instead-2j86</guid>
      <description>&lt;p&gt;We have all been there.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; You write a perfect prompt for your AI feature.&lt;/li&gt;
&lt;li&gt; It works great on your machine.&lt;/li&gt;
&lt;li&gt; Two weeks later, you tweak the system prompt slightly.&lt;/li&gt;
&lt;li&gt; Suddenly, your bot starts replying with 5-paragraph essays instead of one-liners.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In traditional web development, we solved this years ago with &lt;strong&gt;Snapshot Testing&lt;/strong&gt;. If a UI component changes by one pixel, the test fails until you approve it.&lt;/p&gt;

&lt;p&gt;Why aren't we doing this for AI?&lt;/p&gt;

&lt;p&gt;Most of us are still "Vibe Checking" manually running the prompt, reading the output, and saying, &lt;em&gt;"Yeah, seems okay."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I built a tool to fix this.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introducing SafeStar
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/askpext/safestar" rel="noopener noreferrer"&gt;SafeStar&lt;/a&gt; is a zero-dependency CLI tool that brings the "Snapshot &amp;amp; Diff" workflow to AI engineering.&lt;/p&gt;

&lt;p&gt;It doesn't care if you use Python, Node, or curl. It treats your AI as a black box and answers one question: &lt;strong&gt;"Did the behavior change compared to last time?"&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How it works
&lt;/h3&gt;

&lt;p&gt;It follows a Git-like workflow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Snapshot&lt;/strong&gt; a baseline of "good" behavior.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Run&lt;/strong&gt; your current code.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;Diff&lt;/strong&gt; the results to detect drift.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Quick Start
&lt;/h3&gt;

&lt;p&gt;You can try it right now without changing your code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Install it&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--save-dev&lt;/span&gt; safestar
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Define a Scenario&lt;/strong&gt;&lt;br&gt;
Create a file &lt;code&gt;scenarios/refund.yaml&lt;/code&gt;. Tell SafeStar how to run your script using the &lt;code&gt;exec&lt;/code&gt; key.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;refund_bot&lt;/span&gt;
&lt;span class="na"&gt;prompt&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;want&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;a&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;refund&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;immediately."&lt;/span&gt;

&lt;span class="c1"&gt;# Your actual code command&lt;/span&gt;
&lt;span class="na"&gt;exec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;python3&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;my_agent.py"&lt;/span&gt;

&lt;span class="c1"&gt;# Run it 5 times to catch randomness/instability&lt;/span&gt;
&lt;span class="na"&gt;runs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5&lt;/span&gt;

&lt;span class="c1"&gt;# Simple guardrails&lt;/span&gt;
&lt;span class="na"&gt;checks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;max_length&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;200&lt;/span&gt;
  &lt;span class="na"&gt;must_not_contain&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;I&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;am&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;just&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;an&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;AI"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;3. Create a Baseline&lt;/strong&gt;&lt;br&gt;
Run it until you get an output you like, then "freeze" it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx safestar baseline refund_bot
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;4. Check for Drift in CI&lt;/strong&gt;&lt;br&gt;
Now, whenever you change your prompt or model, run this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npx safestar diff scenarios/refund.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your model drifts, SafeStar screams at you:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;--- SAFESTAR REPORT ---
Status: FAIL

Metrics:
  Avg Length: 45 chars -&amp;gt; 120 chars
  Drift:      +166% vs baseline (WARNING)
  Variance:   0.2 -&amp;gt; 9.8 (High instability)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I was tired of complex evaluation dashboards that give me a "correctness score" of 87/100. I don't care about the score. I care about &lt;strong&gt;regressions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If my bot was working yesterday, I just want to know if it is &lt;em&gt;different&lt;/em&gt; today.&lt;/p&gt;

&lt;p&gt;SafeStar is open source, local-first, and fits right into GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NPM:&lt;/strong&gt; &lt;a href="https://www.npmjs.com/package/safestar" rel="noopener noreferrer"&gt;npmjs.com/package/safestar&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/askpext/safestar" rel="noopener noreferrer"&gt;github.com/askpext/safestar&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Read full blog&lt;/strong&gt; (&lt;a href="https://pext.org/blogs/safestar" rel="noopener noreferrer"&gt;https://pext.org/blogs/safestar&lt;/a&gt;) &lt;br&gt;
Let me know if you find it useful!&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>I built a "Vibe-Based" Notepad with Tauri v2 (It weighs 4MB)</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Mon, 05 Jan 2026 18:03:04 +0000</pubDate>
      <link>https://dev.to/askadityapandey/i-built-a-vibe-based-notepad-with-tauri-v2-it-weighs-4mb-57b3</link>
      <guid>https://dev.to/askadityapandey/i-built-a-vibe-based-notepad-with-tauri-v2-it-weighs-4mb-57b3</guid>
      <description>&lt;p&gt;Stop me if you've heard this one:&lt;br&gt;
A developer gets tired of their tools, decides to build their own, accidentally creates a cult philosophy, and learns DevOps along the way.&lt;/p&gt;

&lt;p&gt;Hi, I'm Aditya. Last weekend, I looked at my text editor and realized something: It has no soul.&lt;/p&gt;

&lt;p&gt;VS Code is a cockpit. Notion is a project manager. Obsidian is a graph database.&lt;br&gt;
Where is the app for just... bleeding onto the page?&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://www.producthunt.com/products/summerpad" rel="noopener noreferrer"&gt;SummerPad&lt;/a&gt;.&lt;br&gt;
It's an open-source, local-first "Mood Engine" for writers. And I built it using the Tauri v2 Super-Stack.&lt;br&gt;
Here is how (and why) I did it.&lt;/p&gt;
&lt;h2&gt;
  
  
  🏗 The Stack (RIP Electron)
&lt;/h2&gt;

&lt;p&gt;I wanted this app to launch instantly. If I have an idea at 3 AM, I can't wait for a 150MB Electron helper process to spin up.&lt;/p&gt;

&lt;p&gt;Core: Tauri v2 (Rust backend).&lt;/p&gt;

&lt;p&gt;UI: React + Vite.&lt;/p&gt;

&lt;p&gt;Styling: Tailwind CSS.&lt;/p&gt;

&lt;p&gt;Animations: Framer Motion (crucial for the "feel").&lt;/p&gt;

&lt;p&gt;Build System: GitHub Actions (Cross-platform compilation).&lt;/p&gt;

&lt;p&gt;The Result: A native Windows, Mac, and Linux app that weighs about 4MB.&lt;/p&gt;
&lt;h2&gt;
  
  
  🎨 The "Vibe Engine" Architecture
&lt;/h2&gt;

&lt;p&gt;Most apps treat themes as "Light Mode" or "Dark Mode." Boring.&lt;br&gt;
I wanted Realities.&lt;/p&gt;

&lt;p&gt;In SummerPad, selecting a font doesn't just change the typeface; it changes the entire DOM state.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// The Vibe Configuration
const FONTS = [
  { 
    name: 'Playfair Display', 
    label: 'The Romantic', 
    colors: { bg: '#F2EBE3', text: '#4A4A4A' } // Warm Beige
  },
  { 
    name: 'JetBrains Mono', 
    label: 'The Hacker', 
    colors: { bg: '#09090b', text: '#22c55e' } // Terminal Green
  },
  { 
    name: 'Righteous', 
    label: 'The Cyberpunk', 
    colors: { bg: '#11001c', text: '#ff2a6d' }, 
    glow: true // &amp;lt;--- The Secret Sauce
  }
];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When a user selects "The Cyberpunk," we don't just switch CSS variables. We inject a dynamic text-shadow property directly into the input components to create a neon burn-in effect:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const glowStyle = selectedFont.glow 
  ? { textShadow: `0 0 10px ${colors.text}, 0 0 20px ${colors.text}` } 
  : {};

&amp;lt;textarea style={{ ...glowStyle, color: colors.text }} /&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It’s simple, but it feels magical.&lt;/p&gt;

&lt;h2&gt;
  
  
  📸 The "Clout" Export (Solving the Screenshot Problem)
&lt;/h2&gt;

&lt;p&gt;Writers love sharing snippets on Twitter/X, but OS screenshots look messy (UI clutter, cursors, bad cropping).&lt;/p&gt;

&lt;p&gt;I built a rendering engine directly into the editor using html2canvas.&lt;/p&gt;

&lt;p&gt;User clicks the Camera Icon.&lt;/p&gt;

&lt;p&gt;React freezes the state.&lt;/p&gt;

&lt;p&gt;We invisibly clone the DOM, strip out the UI (buttons/scrollbars), inject a watermark, and render it at 3x scale for crisp text.&lt;/p&gt;

&lt;p&gt;We dump the Blob directly to the user's clipboard.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const handleExport = async () =&amp;gt; {
  const canvas = await html2canvas(editorRef.current, {
    scale: 3, // Retina quality
    backgroundColor: currentTheme.bg,
    onclone: (doc) =&amp;gt; {
      // Hack: Force height to auto to capture full text without scrollbars
      doc.querySelector('.editor').style.height = 'auto';
    }
  });

  // Direct to clipboard (No "Save As" dialog friction)
  canvas.toBlob(blob =&amp;gt; navigator.clipboard.write([new ClipboardItem({'image/png': blob})]));
};

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  🔮 What's Next?
&lt;/h2&gt;

&lt;p&gt;SummerPad is 100% open source. I'm currently looking for contributors who want to help add:&lt;/p&gt;

&lt;p&gt;Typewriter Sounds (Rust-based audio triggers on keypress).&lt;/p&gt;

&lt;p&gt;Zen Mode (Fade out UI completely when typing).&lt;/p&gt;

&lt;p&gt;📥 Try it out&lt;/p&gt;

&lt;p&gt;You can download the binary for your OS here:&lt;br&gt;
👉 &lt;a href="https://www.pext.org/summerpad" rel="noopener noreferrer"&gt;Download &lt;/a&gt;SummerPad&lt;/p&gt;

&lt;p&gt;Or check the code (and maybe give it a ⭐️?):&lt;br&gt;
👉&lt;a href="https://github.com/askpext/summerpad" rel="noopener noreferrer"&gt; GitHub Repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>productivity</category>
      <category>rust</category>
      <category>showdev</category>
    </item>
    <item>
      <title>How to Build a Billion-Dollar Company by Giving Everything Away for Free</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Sun, 04 Jan 2026 10:01:48 +0000</pubDate>
      <link>https://dev.to/askadityapandey/how-to-build-a-billion-dollar-company-by-giving-everything-away-for-free-1n8a</link>
      <guid>https://dev.to/askadityapandey/how-to-build-a-billion-dollar-company-by-giving-everything-away-for-free-1n8a</guid>
      <description>&lt;p&gt;My friend called me crazy when I told him I was contributing to Cal.com, an open source scheduling platform. "Why would you work for free on something that's already free?" he asked. "How do they even make money?"&lt;/p&gt;

&lt;p&gt;Six months later, Cal.com raised $25 million and is building a legitimate business around their free, open source calendar tool. My friend still thinks I'm crazy, but now he's asking how this whole "give everything away and somehow get rich" thing actually works.&lt;/p&gt;

&lt;p&gt;Here's the thing that blows most people's minds: some of the most valuable tech companies in history built their entire business on open source software. Red Hat sold to IBM for $34 billion. MongoDB is worth over $20 billion. Elastic, GitLab, HashiCorp. All built on code that anyone can download, modify, and use for free.&lt;/p&gt;

&lt;p&gt;The traditional business logic says this should be impossible. You can't build a profitable company by giving away your core product for free. Except you absolutely can, and the companies that figure out how to do it right often dominate their entire industry.&lt;/p&gt;

&lt;p&gt;The secret isn't in the code. It's in understanding what customers actually pay for.&lt;/p&gt;

&lt;p&gt;When I started contributing to open source projects, I thought the business models were straightforward. Make free software, charge for support, profit. That naive view lasted about five minutes into reading actual company strategies. The reality is way more sophisticated, and way more interesting.&lt;/p&gt;

&lt;p&gt;Most people think open source companies fail because they can't monetize free software. The truth is the opposite. Open source companies fail when they don't understand the difference between their product and their business. The code is the product. The business is everything else customers need to actually use that code in production.&lt;/p&gt;

&lt;p&gt;Let me break down how this actually works, because once you see the pattern, you'll understand why open source isn't just a viable business model. It's often the dominant one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Economics Nobody Talks About
&lt;/h2&gt;

&lt;p&gt;Traditional software companies spend massive amounts on customer acquisition. They build sales teams, run ads, attend conferences, and pray someone will try their closed, proprietary solution. Open source companies flip this entire model.&lt;/p&gt;

&lt;p&gt;Instead of convincing people to try your software, you make it so good and so accessible that developers naturally gravitate toward it. Every GitHub star, every Stack Overflow answer, every blog post about your project becomes free marketing. Developers become your unpaid sales force because they genuinely love using your tools.&lt;/p&gt;

&lt;p&gt;Cal.com gets this. They built a scheduling tool that's genuinely better than Calendly for many use cases, made it completely open source, and let the developer community discover it organically. No massive ad spend, no aggressive sales tactics. Just good software that solves real problems.&lt;/p&gt;

&lt;p&gt;This creates what economists call a "network effect." The more people use your open source project, the more valuable it becomes. More users mean more contributors, more features, better documentation, and stronger community support. This makes it even more attractive to new users, creating a virtuous cycle that's incredibly hard for closed source competitors to break.&lt;/p&gt;

&lt;p&gt;But here's where it gets really interesting from a business perspective. All those free users aren't just costs you're absorbing. They're your R&amp;amp;D department, your QA team, and your product marketing all rolled into one. They find bugs you'd never catch, build features you'd never think of, and advocate for your solution in ways no paid marketing could achieve.&lt;/p&gt;

&lt;p&gt;The companies that understand this don't see free users as a drain on resources. They see them as the foundation of a business model that scales better than any traditional software company ever could.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Three Models That Actually Work
&lt;/h2&gt;

&lt;p&gt;Most people think there's only one way to monetize open source: charge for support. That's like saying there's only one way to monetize a website: banner ads. The reality is much more nuanced, and the successful companies usually combine multiple approaches.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Open Core Strategy&lt;/strong&gt; is probably the most common approach. You open source the core functionality that gets people hooked, then charge for enterprise features that businesses actually need. MongoDB does this perfectly. Their core database is completely free and open source. But if you want advanced security, monitoring, or management tools, you pay for MongoDB Atlas or Enterprise Advanced.&lt;/p&gt;

&lt;p&gt;The genius here is that developers fall in love with the free version, build applications on it, and then their companies naturally upgrade when they need enterprise capabilities. You're not selling to developers. You're selling to the businesses that employ developers who already chose your technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Hosted/Cloud Strategy&lt;/strong&gt; takes your open source software and sells it as a managed service. Customers get all the benefits of your software without the headache of running it themselves. They're not paying for the code. They're paying for convenience, reliability, and not having to hire DevOps teams.&lt;/p&gt;

&lt;p&gt;GitLab exemplifies this approach. You can download and run GitLab on your own servers for free. But most companies would rather pay GitLab to host, maintain, and scale their Git repositories rather than deal with that complexity internally. Same software, completely different value proposition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Dual Licensing Model&lt;/strong&gt; is the most aggressive approach. You offer your software under two licenses: a free open source license with restrictions (usually around commercial use), and a paid commercial license for businesses that need more flexibility. This works particularly well for developer tools and infrastructure software.&lt;/p&gt;

&lt;p&gt;Cal.com uses elements of this strategy. The core scheduling functionality is open source, but they offer Cal.com Cloud as a hosted solution for teams that want the benefits without the setup complexity. They're also building premium features and integrations that make sense for businesses but aren't necessary for individual users.&lt;/p&gt;

&lt;p&gt;The key insight across all these models is that you're not selling software. You're selling outcomes. Businesses don't want to run databases, manage Git repositories, or configure scheduling systems. They want their applications to work, their code to be safe, and their meetings to be organized. Open source gives them confidence in the underlying technology, while paid services deliver the business outcomes they actually care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Strategy Dominates Tech
&lt;/h2&gt;

&lt;p&gt;There's a reason why open source business models keep winning in competitive markets. It's not just about the economics. It's about trust, transparency, and long-term thinking that resonates incredibly well with technical buyers.&lt;/p&gt;

&lt;p&gt;When a developer evaluates closed source software, they're making a leap of faith. They don't know how it works internally, they can't fix bugs themselves, and they're completely dependent on the vendor for updates and improvements. With open source software, they can read the code, understand the architecture, and have confidence that they're not locked into a black box solution.&lt;/p&gt;

&lt;p&gt;This trust factor becomes crucial as companies scale. CTOs making infrastructure decisions aren't just buying software for today. They're making choices they'll live with for years. Open source gives them an escape hatch. Even if the company behind the software disappears or makes bad decisions, the code will still exist and can be maintained by the community or internally.&lt;/p&gt;

&lt;p&gt;The transparency of open source also accelerates innovation in ways that closed source software can't match. When Netflix built their entire streaming infrastructure on open source tools, they didn't just use the software. They contributed improvements back to the community, making the tools better for everyone. This creates a positive feedback loop where the biggest users become the biggest contributors, constantly improving the product for everyone.&lt;/p&gt;

&lt;p&gt;From a competitive perspective, this creates incredibly strong moats. Once an open source project gains momentum, it becomes very difficult for closed source competitors to catch up. Why would developers choose a proprietary alternative when there's a battle-tested, community-driven solution that's constantly improving?&lt;/p&gt;

&lt;p&gt;Companies like Docker, Kubernetes, and React didn't just win their respective markets. They essentially ended the competition. Once these tools reached critical mass in the developer community, alternative approaches became irrelevant almost overnight.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Mistakes That Kill Open Source Startups
&lt;/h2&gt;

&lt;p&gt;Not every open source company succeeds, and the failures usually follow predictable patterns. The biggest mistake is treating open source as a marketing strategy instead of a core business strategy. Companies that slap an open source license on mediocre software and expect the community to do the hard work of building a business around it are usually disappointed.&lt;/p&gt;

&lt;p&gt;The community can smell insincerity from miles away. If your open source project feels like a demo version of your real product, developers will find alternatives. If your documentation is poor, your contribution process is complicated, or your company doesn't engage authentically with users, the network effects work against you instead of for you.&lt;/p&gt;

&lt;p&gt;Another common mistake is optimizing for the wrong metrics. Companies that focus obsessively on GitHub stars or download numbers without thinking about conversion to paid services often build impressive-looking projects that generate no revenue. The goal isn't to maximize free usage. It's to build a sustainable funnel from free users to paying customers.&lt;/p&gt;

&lt;p&gt;Timing matters too. Open sourcing too early, before your software is genuinely useful, means you'll never build the community momentum you need. Open sourcing too late, after competitors have established themselves, means you're playing catch-up in a market that's already moving toward other solutions.&lt;/p&gt;

&lt;p&gt;The companies that succeed treat open source as a long-term investment in building the best possible solution to a real problem. They engage authentically with their communities, build genuinely useful software, and create clear paths from free usage to paid value. It's not a get-rich-quick scheme. It's a patient, strategic approach to building technology businesses that can dominate their markets for decades.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bottom Line for Entrepreneurs
&lt;/h2&gt;

&lt;p&gt;If you're thinking about building an open source business, here's what actually matters: start with a problem that developers face regularly, build something genuinely better than existing solutions, and make it ridiculously easy for people to get started with your software.&lt;/p&gt;

&lt;p&gt;Focus on creating value for your free users first. A thriving community of happy free users is the foundation everything else builds on. But always have a clear vision for how businesses will pay you for additional value. Whether that's hosting, support, premium features, or professional services, you need a path from free to paid that makes sense for your specific market.&lt;/p&gt;

&lt;p&gt;Don't underestimate the complexity of building and maintaining a community. It's not just about writing code. It's about documentation, communication, user support, and creating an environment where other developers want to contribute. This is often harder than building the initial software.&lt;/p&gt;

&lt;p&gt;But if you get it right, you're not just building a business. You're building a movement. And movements, especially in technology, tend to be more durable and more valuable than traditional companies. The developers who contribute to your project become invested in its success. The companies that build on your software become stakeholders in your ecosystem.&lt;/p&gt;

&lt;p&gt;That's not just a business model. It's a competitive advantage that's almost impossible to replicate through traditional means. And in a world where software is eating everything, that advantage might be the most valuable thing you can build.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Why Android is Not Really Open Source</title>
      <dc:creator>Aditya Pandey</dc:creator>
      <pubDate>Tue, 30 Dec 2025 13:30:20 +0000</pubDate>
      <link>https://dev.to/askadityapandey/why-android-is-not-really-open-source-3626</link>
      <guid>https://dev.to/askadityapandey/why-android-is-not-really-open-source-3626</guid>
      <description>&lt;p&gt;I used to believe Android was the poster child of open source. "It's Linux-based, it's free, it's open, right?" That's what I told myself when I first tried building a custom ROM in college. I pulled down the Android Open Source Project (AOSP) expecting the full Android experience. &lt;/p&gt;

&lt;p&gt;What I got instead was a half-baked shell. No Play Store. No Gmail. No Maps. Just a plain OS that felt more like a demo than the "world's most popular open source project."&lt;/p&gt;

&lt;p&gt;That moment taught me something important: Android might be open source on paper, but in practice? It's a tightly controlled Google product.&lt;/p&gt;

&lt;h2&gt;
  
  
  Android's Open Source Theater
&lt;/h2&gt;

&lt;p&gt;Sure, AOSP looks impressive on the surface. You can clone the repo, build it, flash it, and boom you've got Android. That's leagues better than iOS, which is locked down from top to bottom. &lt;/p&gt;

&lt;p&gt;But here's what nobody tells you: the Android you download from AOSP isn't the Android anyone actually uses.&lt;/p&gt;

&lt;p&gt;The version running on your phone comes loaded with Google Mobile Services (GMS). That means the Play Store, Google Maps, YouTube, Chrome, Gmail, and all those APIs that third party apps depend on. None of that stuff is in AOSP. It's all closed, proprietary, and locked behind Google's licensing agreements.&lt;/p&gt;

&lt;p&gt;This is where most developers hit the wall. You think Android is yours to hack and remix, but the second you need real features like push notifications, location services, app distribution you slam into Google's paywall.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google's Real Power Play
&lt;/h2&gt;

&lt;p&gt;Here's how the game actually works: if Samsung, Xiaomi, OnePlus, or any phone maker wants to ship devices with the Play Store, they have to sign Google's licensing deal. And that deal isn't just "here, use our store." It comes with requirements: preload Google apps, make Google Search the default, bundle Chrome. That's how Google keeps its ecosystem dominant while keeping the base code "open."&lt;/p&gt;

&lt;p&gt;Companies that don't play ball get crushed. Look at Huawei. Google banned them from using Google services in 2019, and their phones became basically unsellable outside China overnight. They scrambled to build HarmonyOS and their own app store, but let's be real, it's not the same experience.&lt;/p&gt;

&lt;p&gt;Amazon tried the same thing with FireOS. It's built on AOSP, but without Google services it feels like you're using a completely different operating system. Amazon spent years building their own Appstore, maps, and notification systems, and it still doesn't compare.&lt;/p&gt;

&lt;p&gt;Even enthusiasts feel the pain. Custom ROMs like LineageOS are incredible community projects, but ask anyone running them: life without Google Play Services sucks. Apps crash, APIs break, the whole experience falls apart. As a developer, you can see how much of "Android" actually runs on Google's proprietary code.&lt;/p&gt;

&lt;p&gt;You can fork Android, technically. But unless you've got billions to rebuild Google's entire ecosystem, you're shipping broken software.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Bigger Game Here
&lt;/h2&gt;

&lt;p&gt;For me, this whole "Android is open source" thing isn't really about phones. It's about how companies weaponize openness. Open source doesn't equal freedom it equals adoption. Google open-sourced AOSP so hardware makers everywhere could build cheap devices and flood the market. That's why Android dominates globally. But the real lock-in happens in that closed layer of services on top.&lt;/p&gt;

&lt;p&gt;This pattern shows up everywhere. Chromium is open source, but Google Chrome with sync, DRM, and integrations is what people actually use. Elasticsearch was open until AWS built a competing service, forcing Elastic to change their license. MongoDB did the same thing. Open source gets the party started, but the money and control live in the proprietary add-ons.&lt;/p&gt;

&lt;p&gt;When I flashed AOSP on my old phone and stared at that barebones homescreen, it finally clicked. Android without Google isn't Android. It's a skeleton. AOSP still has value (it powers forks, research projects, IoT devices), but it shows how "open" can be more marketing than reality.&lt;/p&gt;

&lt;p&gt;If you care about open source, here's the real lesson: don't confuse open code with open ecosystems. The code might be free, but power belongs to whoever controls the services, distribution, and defaults. In Android's case, that's Google, and they've played this game better than almost anyone.&lt;/p&gt;

</description>
      <category>google</category>
      <category>android</category>
      <category>discuss</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
