DEV Community

Cover image for I think the first AI agent normal people will actually copy is the one that checks websites while they sleep
Lars Winstand
Lars Winstand

Posted on • Originally published at standardcompute.com

I think the first AI agent normal people will actually copy is the one that checks websites while they sleep

I keep seeing consumer AI demos built around conversation.

A chat buddy. A life coach. A second brain with a cute UI.

I think that’s mostly backwards.

The first AI agent normal people will actually copy is much more boring:

A watcher agent that checks annoying websites on a schedule and only pings you when something meaningful changes.

Not “talk to me.”

More like: “watch this ugly permit portal every 30 minutes and tell me when my status changes.”

That pattern already exists in tools like OpenClaw, Distill.io, and changedetection.io. And honestly, it’s more useful than a lot of the flashy consumer agent stuff getting attention right now.

The post that made this click for me

While digging through job-search automation and browser-agent workflows, I found a thread on r/openclaw titled:

“OpenClaw found my lost cat!”

That sounds like bait until you read it.

The core detail was simple: the user told OpenClaw about the situation, and the agent kept checking humane society listings and related forums until something changed.

That’s the whole pattern.

The useful part was not the model.

Not glm 5.1.
Not GPT-5.
Not Claude Opus 4.6.

The useful part was delegated persistence.

The human stopped manually re-checking the same sources every 20 minutes.

That is a bigger category than people realize.

Most painful personal tasks are not hard. They are repetitive.

A lot of real-world tasks do not require intelligence in the dramatic sense.

They require:

  • patience
  • repetition
  • low-level browser work
  • remembering to check again later

Examples:

  • job listings across company career pages
  • permit and licensing portals
  • school portals that never send useful notifications
  • apartment listings
  • restocks and price drops
  • used gear classifieds
  • lost pet searches across shelters and neighborhood boards

This is not really a chatbot problem.

It’s a watcher problem.

Website monitoring already proved demand for this

People have been paying for “watch this page and tell me when it changes” for years.

That matters because it means the behavior is already validated. AI is just making the pattern smarter.

Here’s what existing products already prove:

Product What it proves
Distill.io Free People will absolutely use page monitoring even with limited monitors and long intervals
Distill.io Starter ($15/month) Once the task matters, users pay for more monitors and faster checks
Distill.io Professional ($35/month) Serious users scale this behavior hard
changedetection.io Hosted ($8.99/month) There is demand for cheap, flexible, automation-friendly monitoring

The interesting part is that changedetection.io is already drifting toward agent behavior.

It supports things like:

  • Discord alerts
  • Slack alerts
  • Telegram alerts
  • email
  • webhooks
  • browser steps
  • OpenAI-compatible AI endpoints

At that point, you’re not just diffing HTML.

You’re building a decision layer.

Monitor vs agent: the line that actually matters

This is the distinction I keep coming back to.

A website monitor detects change.

A watcher agent decides whether the change is worth bothering you about.

That sounds small, but it changes the whole UX.

A monitor says: something changed

That’s useful when:

  • you know the exact page
  • you know the exact selector
  • you know the exact text you care about

Distill.io is good at this.

An agent says: this change probably matters, here’s why

That’s the upgrade.

Instead of forwarding every diff, the agent can:

  • ignore cosmetic changes
  • compare multiple listings
  • summarize what changed
  • classify signal vs noise
  • escalate only when confidence is high
  • continue searching adjacent sources

That is why the OpenClaw story landed.

It wasn’t “wow, AI can browse.”

It was “wow, I can stop babysitting tabs.”

The architecture I’d actually build

If I were building this today, I’d split it into 3 layers.

1) Detection

Use the dumbest reliable thing first.

  • Distill.io for fast managed monitoring
  • changedetection.io for open-source flexibility
  • Playwright if the site is dynamic, flaky, or login-heavy

changedetection.io with Docker

docker run -d \
  --name changedetection \
  -p 5000:5000 \
  -v $PWD/datastore:/datastore \
  ghcr.io/dgtlmoon/changedetection.io
Enter fullscreen mode Exit fullscreen mode

That gets you a solid baseline watcher quickly.

When Playwright is the better option

If the target site has:

  • login walls
  • cookie banners
  • weird multi-step forms
  • client-rendered content
  • anti-bot weirdness

just use Playwright.

npm init -y
npm install playwright
npx playwright install
Enter fullscreen mode Exit fullscreen mode

Example script to watch a permit portal:

const { chromium } = require('playwright');
const fs = require('fs');

(async () => {
  const browser = await chromium.launch({ headless: true });
  const page = await browser.newPage();

  await page.goto('https://example.gov/permit-status');
  await page.click('text=Accept Cookies');
  await page.fill('#permit-id', process.env.PERMIT_ID);
  await page.click('button[type="submit"]');
  await page.waitForSelector('.status-value');

  const status = await page.locator('.status-value').innerText();
  const previous = fs.existsSync('last-status.txt')
    ? fs.readFileSync('last-status.txt', 'utf8')
    : '';

  if (status !== previous) {
    console.log(`Status changed: ${previous} -> ${status}`);
    fs.writeFileSync('last-status.txt', status);
    // send webhook / Slack / Discord here
  } else {
    console.log('No meaningful change');
  }

  await browser.close();
})();
Enter fullscreen mode Exit fullscreen mode

That alone is useful.

But the interesting part starts when you add judgment.

2) Judgment

This is where an LLM actually earns its keep.

Not as a chat UI.

As a filter.

Example prompt:

You are reviewing website changes for a user.

Return JSON with:
- meaningful_change: boolean
- summary: string
- urgency: low | medium | high
- reason: string

Ignore:
- timestamps
- layout changes
- ad rotations
- navigation changes
- cosmetic text edits

Flag only changes that affect:
- availability
- price
- status
- deadlines
- application state
- newly posted matching items
Enter fullscreen mode Exit fullscreen mode

If you’re using changedetection.io or your own workflow engine, this can sit behind an OpenAI-compatible endpoint.

That matters because you can swap model providers without rewriting your app.

For example, with the OpenAI SDK pointed at Standard Compute:

import OpenAI from 'openai';

const client = new OpenAI({
  apiKey: process.env.STANDARD_COMPUTE_API_KEY,
  baseURL: 'https://api.standardcompute.com/v1'
});

const response = await client.chat.completions.create({
  model: 'gpt-5.4',
  messages: [
    {
      role: 'system',
      content: 'Classify whether a website change is meaningful and summarize it.'
    },
    {
      role: 'user',
      content: `Old content:\n${oldContent}\n\nNew content:\n${newContent}`
    }
  ],
  response_format: { type: 'json_object' }
});

console.log(response.choices[0].message.content);
Enter fullscreen mode Exit fullscreen mode

This is the exact kind of workload that gets annoying under per-token billing.

Watcher agents are repetitive by design.

They run all day.
They inspect lots of noisy pages.
They often check multiple sources.
Most checks produce nothing useful.

That means your cost model matters a lot.

If every background check feels like it might create a surprise bill, people throttle the system too aggressively or stop using it.

Flat-rate compute is a much better fit for this pattern.

Standard Compute is interesting here because it gives you an OpenAI-compatible API with predictable monthly pricing instead of per-token anxiety. For recurring agent workloads like page watching, filtering, summarizing, and routing alerts, that pricing model makes way more sense than paying for every tiny background decision.

3) Escalation

Do not send alerts to another dashboard.

Send them where the user already lives:

  • Slack
  • Discord
  • Telegram
  • email
  • SMS
  • webhook into n8n, Make, or Zapier

Example Discord webhook:

await fetch(process.env.DISCORD_WEBHOOK_URL, {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    content: `Permit update: ${summary}`
  })
});
Enter fullscreen mode Exit fullscreen mode

Example n8n webhook call:

await fetch('https://your-n8n-instance/webhook/permit-alert', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({
    source: 'permit-portal',
    meaningful_change: true,
    summary,
    raw_status: status
  })
});
Enter fullscreen mode Exit fullscreen mode

That’s the right shape.

Invisible until it matters.

A practical workflow example

Here’s a minimal watcher pipeline for job listings.

  1. Playwright opens 5 company career pages
  2. Extract listing titles + links
  3. Compare against previous run
  4. Send new listings to an LLM for filtering
  5. Alert only if the role matches your criteria

Pseudo-code:

const listings = await scrapeCompanyPages();
const newListings = diffAgainstPrevious(listings);

for (const listing of newListings) {
  const decision = await classifyListingWithLLM(listing, {
    targetTitles: ['Platform Engineer', 'Developer Productivity', 'AI Automation Engineer'],
    locations: ['Remote', 'NYC'],
    seniority: ['Senior', 'Staff']
  });

  if (decision.meaningful_change) {
    await sendSlackAlert(decision.summary, listing.url);
  }
}
Enter fullscreen mode Exit fullscreen mode

This is boring.

That’s why it wins.

Where these systems break in real life

Watcher agents are useful, but they are not magic.

The failure modes are predictable:

  • expired sessions
  • CAPTCHAs
  • selector drift
  • anti-bot changes
  • silent login failures
  • noisy page diffs
  • agents escalating junk too often

And there’s a second issue: autonomy creep.

The more freedom you give the agent, the more likely it is to do something dumb.

My rule for these systems is simple:

  1. watch automatically
  2. summarize automatically
  3. escalate automatically
  4. act only with approval

That gets most of the value without creating a horror story.

Why this matters for developers building agents

If you’re building AI workflows for real users, this category is worth paying attention to.

Because the “watch and notify” pattern has all the properties people actually want:

  • always-on utility
  • easy ROI
  • no training required
  • works in the background
  • maps cleanly to existing automation tools

It also fits perfectly with tools developers already use:

  • Playwright
  • changedetection.io
  • OpenClaw
  • n8n
  • Make
  • Zapier
  • OpenAI-compatible APIs

And it creates a very specific infrastructure need:

You need cheap, reliable, boring inference for recurring background tasks.

Not just one heroic prompt.

Thousands of tiny decisions.

That’s where most AI pricing gets awkward.

My take

The boring agents are going to beat the impressive ones.

Not because they’re smarter.

Because they remove recurring annoyance.

The first personal agent most people will love is probably not a companion and not a general assistant.

It’s the thing that keeps checking ugly websites while they sleep.

And when reality finally changes, it knows whether the update is worth waking them up for.

That’s not flashy.

It’s just useful.

Useful usually wins.

If you’re building one of these, I’d start with this stack:

  • changedetection.io or Playwright for detection
  • an OpenAI-compatible model endpoint for judgment
  • Slack/Discord/Telegram/webhooks for escalation
  • a flat-cost inference layer if you expect the agent to run constantly

That last part matters more than people think.

Watcher agents only feel good when you let them run freely.

If you’re constantly thinking about token spend, you end up building a watcher that watches less.

And that defeats the point.

Top comments (0)