<?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: Senpeng</title>
    <description>The latest articles on DEV Community by Senpeng (@senke0x).</description>
    <link>https://dev.to/senke0x</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%2F3856563%2F7fcae966-ff20-485e-9449-28cbcaa7586e.jpeg</url>
      <title>DEV Community: Senpeng</title>
      <link>https://dev.to/senke0x</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/senke0x"/>
    <language>en</language>
    <item>
      <title>How to Build an AI Dashboard That Tracks a Competitor’s Positioning Over Time</title>
      <dc:creator>Senpeng</dc:creator>
      <pubDate>Wed, 28 Oct 2026 07:41:12 +0000</pubDate>
      <link>https://dev.to/senke0x/how-to-build-an-ai-dashboard-that-tracks-a-competitors-positioning-over-time-2mgm</link>
      <guid>https://dev.to/senke0x/how-to-build-an-ai-dashboard-that-tracks-a-competitors-positioning-over-time-2mgm</guid>
      <description>&lt;p&gt;I rebuilt ten years of Notion’s homepage as a dashboard. The product moved first almost every time.&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%2Fg8mhv10fr0yscoyajvse.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg8mhv10fr0yscoyajvse.png" alt="Notion Phrase" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In June 2016, Notion’s homepage called it a tool “made for modern thinkers.” In August 2026 it says “Where teams and agents think together.” Six positioning phases sit between those two lines. Each is easy to spot in hindsight and hard to date, and harder still to say whether the product moved first or the message did.&lt;/p&gt;

&lt;p&gt;A positioning analysis answers that from three sources: the homepage for what a company claims, the blog and changelog for what it builds, and search and social data for whether anyone cared. I ran one on Notion’s public pages. It shipped first and rewrote the homepage afterward, almost every time. Here’s the method, the dashboard, and the two signals I now check first.&lt;/p&gt;

&lt;h2&gt;
  
  
  The method, by hand: five steps
&lt;/h2&gt;

&lt;p&gt;You can do all of this by hand, with nothing but a browser and a spreadsheet. It’s slow, and further down I’ll show how I automated it. Doing it once by hand first still helps: you’ll know what every chart in the dashboard is built from.&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%2F5ixuje2x43i6wb4f76ys.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5ixuje2x43i6wb4f76ys.png" alt="Five Step" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Pick the company and the window.&lt;/strong&gt; Choose the competitor buyers compare you with most. Cover at least a year, or everything since launch. Shorter windows tend to catch one phase and miss the change.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Capture the homepage over time.&lt;/strong&gt; Open the Wayback Machine, enter the homepage URL and pick one snapshot a month. For each date, write down four things: the page title, the headline, the main buttons and the top navigation. Those four carry most of the positioning.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Mark the phases.&lt;/strong&gt; Start a new phase wherever the title, headline or navigation changes. For each phase, write one line each for who it targets, what it offers and what it promises. Use the company’s own words where you can.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Match content and releases to each phase.&lt;/strong&gt; Sort the posts in each phase by the scenario and audience they cover, and count feature releases per month. Together they show whether the blog and the product back up what the homepage says.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check how the market responded. Look at how outsiders reacted around each shift: search interest on Google Trends, views on the company’s X posts, discussion on Reddit and LinkedIn, and a traffic estimate from Similarweb. Keep the dates and gaps visible, and treat the numbers as context: they rarely prove that a message worked.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For Notion, this came to 119 homepage snapshots and 830 official posts across ten years. By hand, that’s days of copying and pasting, and it’s out of date the next time they ship.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Automating it with Actionbook
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://actionbook.app/" rel="noopener noreferrer"&gt;Actionbook&lt;/a&gt;, the Chrome extension we make, ran all five steps for Notion. It works inside the browser and opens each site the way a person would, so it reads what is on the page: the archived homepage on a given date, the view count under an X post.&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%2Fgtdp0gml9l6yjm1uc3ru.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgtdp0gml9l6yjm1uc3ru.png" alt="Actionbook Process Step" width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In about 30 minutes it collected 119 homepage snapshots from the Wayback Machine, 830 posts from Notion’s blog, changelog and customer stories, 41 posts from @NotionHQ with their views, monthly Google Trends data and a traffic estimate. It tagged every post with its scenario and audience, and split the history into phases wherever the homepage title, headline or navigation changed. Labels it inferred are marked as inferred, and missing data stays missing instead of showing up as zero.&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%2Fcja7jbs5s71xggap0hem.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fcja7jbs5s71xggap0hem.png" alt="Notion Dashboard" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The result is a dashboard you can share with your colleagues and clients. When a number stands out, you ask about it in the side panel, and Actionbook goes back to the sources for the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What ten years of Notion data show
&lt;/h2&gt;

&lt;p&gt;The dashboard has four views. Here’s what each one showed for Notion.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Positioning phases over time
&lt;/h3&gt;

&lt;p&gt;Each phase is a colored band. Search interest runs across it as a line, and feature releases per month sit on top as bars. Notion split into six phases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;January 2016 to March 2018: docs, wikis and tasks in one. “Docs, wikis, tasks. Seamlessly in one.”&lt;/li&gt;
&lt;li&gt;April 2018 to September 2021: the all-in-one workspace. “The all-in-one workspace for your notes, tasks, wikis, and databases.”&lt;/li&gt;
&lt;li&gt;October 2021 to February 2023: every team. “One workspace. Every team. We’re more than a doc. Or a table.”&lt;/li&gt;
&lt;li&gt;March 2023 to May 2025: the connected workspace. “Your wiki, docs &amp;amp; projects. Together,” with AI added to the headline in December 2023.&lt;/li&gt;
&lt;li&gt;June to October 2025: the AI workspace. “The AI workspace that works for you.”&lt;/li&gt;
&lt;li&gt;November 2025 to now: agents. “Work faster with your AI team.” The page title still reads “The AI workspace that works for you.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Clicking a phase opens its detail panel: the headline, releases per month, average search interest and the snapshots on either side of the change. This is where I check whether a split is real. My first pass treated June 2025 to today as one phase, because the page title never changed. The snapshots said otherwise: in November 2025 the headline, the meta description and the navigation (a new Agents entry) all changed in the same month. Since then the headline has been rewritten three more times, from “One workspace. Zero busywork” to “Meet the night shift” in April 2026 and “Where teams and agents think together” in August. All three are about agents.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. How the homepage changed
&lt;/h3&gt;

&lt;p&gt;The matrix showed two details I’d have missed by hand. In March 2021, still in the all-in-one phase, the homepage added “Switch from Evernote” and “Switch from Confluence.” Notion was naming what it wanted to replace, one tool for individuals and one for teams. Seven months later the headline became “One workspace. Every team.”&lt;/p&gt;

&lt;p&gt;The second is a lag. The headline changed between September and October 2021, but the browser page title kept the old wording until February 2022. If you only check page titles, you date that shift four months late.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. What the company writes about
&lt;/h3&gt;

&lt;p&gt;Notion’s 830 official posts (blog, changelog and customer stories) are broken down by scenario and audience for each phase. The topics followed the homepage. Project and task management peaked at 36% of posts in the connected-workspace phase, the same phase Projects launched in. Agents and automation went from 1% of posts in that phase to 17% in the AI-workspace phase and 39% in the agents phase.&lt;/p&gt;

&lt;p&gt;The original pitch faded fast. Docs, wikis and tasks made up 52% of posts in the connected-workspace phase, then 8% and 17% in the two AI phases.&lt;/p&gt;

&lt;p&gt;Audience is less tidy. In the all-in-one phase, 68% of posts didn’t name an audience. In the agents phase it’s 86%. Posts aimed at enterprise or large teams stayed at about 4% or less in every phase.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. How the market responded
&lt;/h3&gt;

&lt;p&gt;Views on @NotionHQ posts are plotted over time, colored by phase. The biggest one is recent: the July 9, 2026 “Ship OS” post reached 3.4M views.&lt;/p&gt;

&lt;p&gt;Search interest for “notion.com” averaged 18 in the connected-workspace phase, 38 in the AI-workspace phase and 64 in the agents phase, on a relative scale where the peak is 100.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the data can’t tell you
&lt;/h2&gt;

&lt;p&gt;A dashboard like this looks more certain than it is, so here’s where I hold back.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wayback has gaps. From 2016 to early 2021, Notion’s archived homepage is an app shell, and only the page title survives. The matrix shows those months as unknown, which is different from absent.&lt;/li&gt;
&lt;li&gt;Post topics describe the company. Scenarios and audiences are classified by keyword rules on titles and URLs. They show what Notion chooses to talk about and say nothing about who uses it.&lt;/li&gt;
&lt;li&gt;View counts are a moment in time. The values were read on October 26, 2026, and X doesn’t show views for posts before December 2022. Recent posts are still collecting.&lt;/li&gt;
&lt;li&gt;Search terms are noisy. “notion.com” is a low-volume term that sits near zero in early years, so the chart overlays “notion” as a reference.&lt;/li&gt;
&lt;li&gt;Traffic sources disagree. Two estimates gave 186.9M and 149.1M for the same month. The dashboard names both and draws no trend.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Once you have the homepage history, the content mix and the market response on one timeline, most arguments about a competitor turn into a question you can look up.&lt;/p&gt;

&lt;p&gt;Start by hand if you want to learn the method. When you’d rather not redo it after every launch, rerun the dashboard instead: new snapshots and posts land at the same link, so the timeline keeps growing.&lt;/p&gt;

&lt;p&gt;If you want to try it on your own competitor, the setup I used is here: &lt;a href="https://actionbook.app/playbooks/competitor-positioning-analysis" rel="noopener noreferrer"&gt;Competitor Positioning Analysis&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>analytics</category>
    </item>
    <item>
      <title>Scaling Our Daily Twitter Scraping Workflow with actionbook's Cloud Browser Providers</title>
      <dc:creator>Senpeng</dc:creator>
      <pubDate>Sat, 18 Apr 2026 18:11:28 +0000</pubDate>
      <link>https://dev.to/senke0x/scaling-our-daily-twitter-scraping-workflow-with-actionbooks-cloud-browser-providers-1hlh</link>
      <guid>https://dev.to/senke0x/scaling-our-daily-twitter-scraping-workflow-with-actionbooks-cloud-browser-providers-1hlh</guid>
      <description>&lt;h2&gt;
  
  
  What We Were Trying to Do Every Morning
&lt;/h2&gt;

&lt;p&gt;Every morning, our inbox looks like a battlefield. Around a thousand emails pour in overnight, each one an IFTTT-generated notification carrying a single Twitter link. Keyword subscriptions, competitor alerts, KOL tracking, industry signals, all jammed together in an unreadable pile.&lt;/p&gt;

&lt;p&gt;Out of those thousand, roughly fifty are actually worth reading. The other 950 are noise.&lt;/p&gt;

&lt;p&gt;But here is the catch. You cannot tell which is which by looking at the email subject. The IFTTT notification gives you a link and not much else. To filter properly, you have to open each tweet and pull three pieces of information: the actual content, the view count, and the like count. Only then can you decide whether a post deserves a closer look or a follow-up.&lt;/p&gt;

&lt;p&gt;So we did what every engineering team does when faced with a thousand repetitive clicks. We automated it.&lt;/p&gt;

&lt;p&gt;And for a long time, our automation was fine. Not great. Just fine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the First Version Broke
&lt;/h2&gt;

&lt;p&gt;Our first crawler was a straightforward Actionbook script running in local mode. Open a batch of tabs, visit each IFTTT-provided link, extract the content and metrics, move on. On paper, we could push it to 30 concurrent tabs on a single machine. In practice, it hit Twitter's rate limit almost immediately.&lt;/p&gt;

&lt;p&gt;Anything above a handful of concurrent requests started coming back with empty pages, challenge screens, or outright blocks. Dropping concurrency to keep the crawler stable meant a full run took around thirty minutes. By the time the data landed, standup was halfway over.&lt;/p&gt;

&lt;p&gt;We tried the usual bag of tricks. Jittered delays. Rotating user agents. Residential proxies. Each one added maintenance cost and the payoff kept shrinking.&lt;/p&gt;

&lt;p&gt;Eventually we stopped and asked the obvious question. What is actually limiting us here?&lt;/p&gt;

&lt;p&gt;It was not CPU. It was not bandwidth. It was not even the script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It was the single exit IP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every request we made went out through the same door. Twitter was not rate-limiting our machine. It was rate-limiting anyone knocking from that address. No amount of local optimization could fix a problem that existed at the network edge.&lt;/p&gt;

&lt;p&gt;The only real way forward was to move to cloud browsers, so that every request could go out from a different IP.&lt;/p&gt;

&lt;h2&gt;
  
  
  Enter &lt;code&gt;--provider&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;Around this time, Actionbook shipped exactly what we needed. A &lt;code&gt;--provider&lt;/code&gt; flag that lets you delegate browser sessions to different cloud browser services. Today it supports three backends: Driver, HyperBrowser, and BrowserUse.&lt;/p&gt;

&lt;p&gt;What matters is not which three providers. What matters is that you can switch between them by changing a single flag, without touching the script. That means we can run the same crawler across multiple providers in parallel, and each provider brings its own pool of IPs.&lt;/p&gt;

&lt;h2&gt;
  
  
  The New SOP: Spreading the Load Across Three Providers
&lt;/h2&gt;

&lt;p&gt;Here is where the economics get interesting. Each of these cloud browser providers offers a free tier. Individually, none of them is generous enough to handle our full daily volume. Together, running in parallel, they comfortably are.&lt;/p&gt;

&lt;p&gt;So we designed the pipeline around that observation.&lt;/p&gt;

&lt;p&gt;At 7 AM, a cron job ingests every IFTTT email from the overnight inbox and extracts the Twitter link embedded in each one. Today that yields around a thousand URLs. The list gets split into three roughly equal slices, one for each provider.&lt;/p&gt;

&lt;p&gt;For each slice, we open a single cloud browser session on the corresponding provider. Inside that session, we drive 10 tabs concurrently, each one visiting its assigned tweet URL and pulling the content, view count, and like count.&lt;/p&gt;

&lt;p&gt;Three providers running in parallel. One session each. Ten tabs per session. Thirty real requests in flight at any moment, but split across three completely independent IP pools. If Twitter throttles one provider's egress, the other two keep going without even noticing.&lt;/p&gt;

&lt;p&gt;From the crawler's point of view, none of this complexity exists. Actionbook abstracts away the differences between Driver, HyperBrowser, and BrowserUse. We wrote one scraper. The orchestrator decides which provider gets which slice, spins up the sessions, and collects the results.&lt;/p&gt;

&lt;p&gt;Once everything lands, the pipeline runs a summarization pass over the collected content and applies our relevance filters. The thousand raw URLs collapse into about fifty tweets that genuinely deserve attention, and those show up in the morning briefing channel before anyone walks into standup. The runtime dropped from around thirty minutes to about five, and rate limit errors effectively went to zero.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing Thought
&lt;/h2&gt;

&lt;p&gt;This Twitter pipeline is just one example. Once you have Actionbook's &lt;code&gt;--provider&lt;/code&gt; flag combined with isolated sessions across different cloud browsers, a lot of workflows that used to feel impractical suddenly become straightforward. &lt;/p&gt;

&lt;p&gt;Anything that needs high-volume access to the same domain, anything that needs a clean session per task, anything that needs to sidestep the limits of a single local machine, all of it fits naturally into this pattern.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>programming</category>
    </item>
    <item>
      <title>Hermes Searched 4 Platforms at Once. I Just Told It What I Wanted.</title>
      <dc:creator>Senpeng</dc:creator>
      <pubDate>Thu, 16 Apr 2026 07:08:07 +0000</pubDate>
      <link>https://dev.to/senke0x/hermes-searched-4-platforms-at-once-i-just-told-it-what-i-wanted-b9g</link>
      <guid>https://dev.to/senke0x/hermes-searched-4-platforms-at-once-i-just-told-it-what-i-wanted-b9g</guid>
      <description>&lt;p&gt;Hermes Agent is one of the hottest open-source agents right now. Runs local, reasons well, handles multi-step tasks without hand-holding. But its built-in browser tools have a bottleneck: one tab at a time. Want to search multiple platforms? Your agent queues them up and waits through each one sequentially.&lt;/p&gt;

&lt;p&gt;I integrated Actionbook with Hermes and asked it to fetch today's trending topics from Twitter, Reddit, Google, and Hacker News. It spun up four browser tabs in parallel and returned the aggregated results in under a minute.&lt;/p&gt;

&lt;p&gt;One instruction. Four platforms. All at once.&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/110663b556014b9bad0757a6c601cc1b"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Integrate Actionbook with Hermes
&lt;/h2&gt;

&lt;p&gt;One line to get Actionbook running in Hermes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npx skills add actionbook/actionbook &amp;amp;&amp;amp; hermes skills install skills-sh/actionbook/actionbook/actionbook -y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I told Hermes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use Actionbook to operate the browser with chrome remote debugging, launching parallel tasks across the following platforms simultaneously to research [your topic], then synthesize a consolidated trend report.
## Tab Management Rule (Apply to ALL tasks)

&amp;gt; After extracting the required information from any detail page (post, article, thread, comment page), immediately close that tab before opening the next one. Never accumulate more than 1–2 open tabs per platform task at any time.

## Execution

Run all 4 platforms in parallel via Actionbook. Each browser task is independent.

HackerNews
1. Open HackerNews and search for [your topic], filter by this week sorted by popularity.
2. For each high-scored post: open the detail/comments page → extract supporting and opposing viewpoints → close the tab.

Reddit
1. Open Reddit and search for [your topic], filter by Top this week.
2. For each relevant post: open the post → switch comment sorting to Controversial → extract pain points, product comparisons, and real user experiences → close the tab.

Twitter/X
1. Open Twitter/X and search for [your topic], filter for high-engagement original posts (no retweets).
2. For each post: open the reply thread → capture sentiment and key opinions from notable voices → close the tab.

Google
1. Open Google and search for [your topic].
2. For each result (news, blog, announcement): open the page → collect key information → close the tab.
3. Cover 1~2 results.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hermes reads the instruction, builds the URL list, opens all 4 tabs through actionbook, then snapshots and extracts text from each one in parallel. No waiting for one to finish before starting the next.&lt;/p&gt;

&lt;p&gt;You just watch four tabs light up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why trending data breaks with one tab at a time
&lt;/h2&gt;

&lt;p&gt;Trending content shifts by the minute. If your agent checks Twitter first, then Reddit, then Google, then HN, by the time it finishes the fourth search, the first result is already stale. You end up with a patchwork of different moments instead of one coherent snapshot.&lt;/p&gt;

&lt;p&gt;Parallel tabs fix this. All four searches happen at the same instant. The data you get back is a synchronized time slice across every platform.&lt;/p&gt;

&lt;h2&gt;
  
  
  How actionbook handles parallel tabs
&lt;/h2&gt;

&lt;p&gt;Actionbook's daemon manages multiple CDP connections concurrently. Each tab is an independent target. No "active tab" concept, no switching overhead.&lt;/p&gt;

&lt;p&gt;Behind the scenes, here's what Hermes runs:&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;# Open 4 tabs at once&lt;/span&gt;
actionbook browser new-tab &lt;span class="s2"&gt;"https://twitter.com/search?q=AI+agents"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
actionbook browser new-tab &lt;span class="s2"&gt;"https://www.reddit.com/search/?q=AI+agents"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
actionbook browser new-tab &lt;span class="s2"&gt;"https://www.google.com/search?q=AI+agents+trending+today"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
actionbook browser new-tab &lt;span class="s2"&gt;"https://news.ycombinator.com"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1

&lt;span class="c"&gt;# Wait for all 4 to load, then extract&lt;/span&gt;
actionbook browser wait-idle &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
actionbook browser text &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
actionbook browser wait-idle &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t2
actionbook browser text &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t2
&lt;span class="c"&gt;# ... same for t3, t4&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Four pages loaded, four pages extracted. Hermes reads all the results and writes a single summary.&lt;/p&gt;

&lt;h2&gt;
  
  
  What else you can do with parallel tabs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Morning briefing for newsletter writers.&lt;/strong&gt; A dev I know runs this every morning before coffee. Hermes pulls trending from multiple sources, cross-references the overlapping topics, and outputs a structured briefing. What used to be 30 minutes of tab-switching is now a single instruction the night before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Competitive monitoring.&lt;/strong&gt; An indie hacker pointed multiple tabs at competitor blogs and changelogs simultaneously. Every Monday, Hermes opens them all, extracts what shipped that week, and drops a comparison into a markdown file. No RSS, no manual checking.&lt;/p&gt;

&lt;p&gt;Multiple tabs, one instruction. This is how agents should be searching the web.&lt;/p&gt;

</description>
      <category>hermes</category>
      <category>actionbook</category>
      <category>browserautomation</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>I Asked Claude Code to Scrape First Round. It Opened 30 Tabs at Once.</title>
      <dc:creator>Senpeng</dc:creator>
      <pubDate>Fri, 10 Apr 2026 11:53:19 +0000</pubDate>
      <link>https://dev.to/senke0x/i-asked-claude-code-to-scrape-first-round-it-opened-30-tabs-at-once-1pf</link>
      <guid>https://dev.to/senke0x/i-asked-claude-code-to-scrape-first-round-it-opened-30-tabs-at-once-1pf</guid>
      <description>&lt;p&gt;I wanted to study how successful startups on First Round Capital craft their taglines. So I gave Claude Code one instruction: use actionbook go to ervery website and extract tagline.&lt;/p&gt;

&lt;p&gt;Then Claude Code instead of clicking through each page one by one like a traditional browser agent would, it opened 30 tabs simultaneously and returned everything in under a minute.&lt;/p&gt;

&lt;p&gt;This is how agents should be using browsers all along.&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/e8dce4a3f70f4787bcfce5b7b5ed958a"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Setup your agent in one sentence
&lt;/h2&gt;

&lt;p&gt;Tell Claude Code one sentence:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find actionbook on GitHub and install it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the entire setup.&lt;/p&gt;

&lt;p&gt;After setup, give it one instruction:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Collect all companies URL from firstround.com/companies.
Open 30 tabs at once. Take snapshot of each page and extract the company name and tagline and save as CSV (company name, URL, tagline).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude Code builds the URL list from the index page, batches them into groups of 30, and manages tab rotation on its own. You just watch 30 tabs open, scrape, close, and repeat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why agents need Actionbook for parallel tabs
&lt;/h2&gt;

&lt;p&gt;Browser agents today work one tab at a time. That's fine for 5 pages but not for triaging hundreds of emails, parsing a thousand tweets, or scanning Reddit threads. One tab at a time, your agent spends most of its time waiting instead of working.&lt;/p&gt;

&lt;p&gt;Actionbook gives agents parallel browser access. 30 tabs open, 30 tabs working, all at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Actionbook isolates each tab
&lt;/h2&gt;

&lt;p&gt;Every Actionbook browser command carries an explicit address: &lt;code&gt;--session&lt;/code&gt; and &lt;code&gt;--tab&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;actionbook browser text &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
actionbook browser text &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t17
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These two execute at the same time. There's no "active tab" concept. Each tab is an independent target. The daemon behind the CLI manages 30 CDP connections in parallel, one per tab, with its own page state and lifecycle.&lt;/p&gt;

&lt;p&gt;That's what makes the batch cycle possible:&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;# Open 30 tabs&lt;/span&gt;
actionbook browser new-tab &lt;span class="s2"&gt;"https://firstround.com/review/post-1"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
actionbook browser new-tab &lt;span class="s2"&gt;"https://firstround.com/review/post-2"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
&lt;span class="c"&gt;# ... 28 more&lt;/span&gt;

&lt;span class="c"&gt;# Wait + scrape all 30 in parallel&lt;/span&gt;
actionbook browser wait-idle &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
actionbook browser text &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
&lt;span class="c"&gt;# ... same for t2 through t30&lt;/span&gt;

&lt;span class="c"&gt;# Close the batch, open next 30&lt;/span&gt;
actionbook browser close-tab &lt;span class="nt"&gt;--session&lt;/span&gt; s1 &lt;span class="nt"&gt;--tab&lt;/span&gt; t1
actionbook browser new-tab &lt;span class="s2"&gt;"https://firstround.com/review/post-31"&lt;/span&gt; &lt;span class="nt"&gt;--session&lt;/span&gt; s1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;End result: 192 websites visited, each one snapshotted and parsed. Company name, URL, and tagline extracted into a single CSV. 7 batches, 1 minute.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond scraping: real workflows across tabs
&lt;/h2&gt;

&lt;p&gt;Extracting text is the simplest case. The interesting part is what happens when the agent clicks, fills forms, and navigates across 30 tabs at the same time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Product growth workflows.&lt;/strong&gt; One team uses Actionbook to open dozens of Gmail threads, Twitter mentions, and Reddit posts in parallel. Their agent reads everything at once, cross-references the feedback, and updates their growth funnel doc. What used to be a morning of manual triage now takes minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Flight deal hunting.&lt;/strong&gt; Another user built a flight booking agent that opens 5 airline sites simultaneously, searches the same route on all of them, compares prices, and returns the cheapest option. The agent fills in departure, destination, and dates on each site at the same time.&lt;/p&gt;

&lt;p&gt;Actionbook lets your agent control the browser in parallel. This is what agents should have been doing from the start.&lt;/p&gt;

</description>
      <category>claudecode</category>
      <category>actionbook</category>
      <category>browserautomation</category>
      <category>aiagents</category>
    </item>
    <item>
      <title>Let OpenClaw Use Your ChatGPT GPT-5.4 Pro Model</title>
      <dc:creator>Senpeng</dc:creator>
      <pubDate>Fri, 03 Apr 2026 06:47:11 +0000</pubDate>
      <link>https://dev.to/senke0x/let-openclaw-use-your-chatgpt-gpt-54-pro-model-3l2l</link>
      <guid>https://dev.to/senke0x/let-openclaw-use-your-chatgpt-gpt-54-pro-model-3l2l</guid>
      <description>&lt;p&gt;I run OpenClaw on my Mac Mini as a personal assistant for daily automation. Recently I wanted to give it one more ability: talk to ChatGPT through my actual browser, not the API.&lt;/p&gt;

&lt;p&gt;Here's what it looks like. I send a message in Telegram, OpenClaw opens ChatGPT in Chrome, sends the prompt, reads the response, and brings it back:&lt;/p&gt;


&lt;div&gt;
  &lt;iframe src="https://loom.com/embed/2a519f9ea0a046c1875a82bd16d1e0d2"&gt;
  &lt;/iframe&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Why Operate ChatGPT This Way
&lt;/h2&gt;

&lt;p&gt;Some ChatGPT models like GPT-5.4 Pro are only available through the web interface with a Plus or Pro subscription. The API has its own model list  and own pricing. Going through the browser means OpenClaw gets access to every model I can use, including the ones the API doesn't offer.&lt;/p&gt;

&lt;p&gt;When I chat with OpenClaw through Telegram and need research on something, I just ask. OpenClaw opens ChatGPT in the browser, sends my question, reads the response, and replies back to me in Telegram. I don't switch apps or copy-paste anything, and the conversation stays in my ChatGPT history so I can pick it up later.&lt;/p&gt;

&lt;p&gt;Because it uses my real browser session, OpenClaw can select any model I have access to. If OpenAI drops a new model next week, OpenClaw just picks it from the dropdown the same way I would.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Set It Up: actionbook CLI + Chrome Extension
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://actionbook.dev?utm_source=devto" rel="noopener noreferrer"&gt;actionbook&lt;/a&gt; is a Browser Action Engine I've been building. It gives AI agents pre-computed "action manuals" for websites, semantic descriptions of what's interactive, so agents don't need to parse raw HTML or guess at selectors.&lt;/p&gt;

&lt;p&gt;The key for OpenClaw: actionbook CLI connects to your &lt;em&gt;existing&lt;/em&gt; Chrome through a Chrome extension. Not a new browser instance. Your running browser with active session.&lt;/p&gt;

&lt;p&gt;There's only one manual step: install the &lt;a href="https://chromewebstore.google.com/detail/actionbook/bebchpafpemheedhcdabookaifcijmfo?utm_source=devto" rel="noopener noreferrer"&gt;actionbook Chrome extension&lt;/a&gt; from the Web Store. Everything else, I just told OpenClaw to do it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install actionbook CLI from https://github.com/actionbook/actionbook
run `actionbook setup`, and pick extension mode for browser connection.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;During setup, the wizard detects your environment: OS, shell, installed browsers. The important step is &lt;strong&gt;Browser Mode&lt;/strong&gt;, where it picks between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;isolated&lt;/strong&gt;: Launch a dedicated browser (clean environment, no setup needed)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;extension&lt;/strong&gt;: Control your existing Chrome&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;OpenClaw picked &lt;strong&gt;extension&lt;/strong&gt; as instructed. That's the whole point. I want to control the Chrome that's already logged into ChatGPT, not spin up a fresh one.&lt;/p&gt;

&lt;h2&gt;
  
  
  How OpenClaw Operates ChatGPT
&lt;/h2&gt;

&lt;p&gt;Once actionbook is set up, I just tell OpenClaw what I need:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Use actionbook to open ChatGPT and ask: 
what are the latest trends in AI agents for 2026? Bring me the answer.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I don't tell OpenClaw which button to click or where the input box is. OpenClaw reads the action manual for ChatGPT, takes a snapshot of the page to understand the current layout, and figures out how to operate it on its own. It fills in the prompt, clicks send, waits for the response to finish streaming, and reads the result back to me.&lt;/p&gt;

&lt;p&gt;Here's what it runs behind the scenes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;actionbook search &lt;span class="s2"&gt;"chatgpt"&lt;/span&gt;
actionbook get chatgpt.com:/:default
actionbook browser snapshot
actionbook browser fill &lt;span class="s2"&gt;"your question here"&lt;/span&gt; &lt;span class="nt"&gt;--ref-id&lt;/span&gt; e3
actionbook browser click &lt;span class="nt"&gt;--ref-id&lt;/span&gt; e4
actionbook browser wait-idle
actionbook browser text
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What Else I Use It For
&lt;/h2&gt;

&lt;p&gt;I also use it for parallel GEO testing. When I need to compare how ChatGPT responds to the same prompt under different contexts, I tell OpenClaw to open multiple tabs and send them all at once.&lt;/p&gt;

&lt;p&gt;And this isn't limited to ChatGPT. OpenClaw can operate any page I'm already logged into. That's what makes it a real agent.&lt;/p&gt;




</description>
      <category>openclaw</category>
      <category>chatgpt</category>
      <category>browser</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
