In the first Agent on the Clock post, I wrote about the research agent that reads the web for me every weekday morning. This post is about a quieter job: an overnight price watch that runs while I sleep and says nothing for days at a time.
The trip: Lisbon to Boston, mid-October, for a small founder conference. Dates fixed, budget not. Baseline round-trip fare when I started watching in early July was hovering between €630 and €660 — one stop, sensible hours, bag included. Historically that route dips below €550 a few times per season. I was not going to check Google Flights twice a day for two months. So I gave the job to the agent.
The setup
The watch runs on my server every 2 hours between 22:00 and 08:00 Lisbon time — 6 checks per night, 7 nights a week. Each check queries the route for my exact dates, filters out junk routings, and logs the result to a file. It ran for 34 nights, about 204 checks in total.
Two thresholds, both decided before the first run:
- Below €520: alert me. That's the buy signal — meaningfully below the €630–€660 baseline, worth waking up for.
- Above €750: alert me. That's the book-now-anyway signal — prices climbing means the window is closing and waiting stops being clever.
Between those two numbers, the watch stays silent. No nightly "price unchanged" message. That rule matters more than the thresholds, and I'll come back to it.
One filter baked in from day one, learned from past trips: one stop maximum, total travel time under 16 hours, checked bag included. A €450 fare with a 27-hour routing and no luggage is not a deal; it's a different product wearing a deal's price tag.
What a normal night looks like
Nothing. That's the point.
A typical log line from July:
2026-07-28 02:14 | LIS-BOS | €641 | within band | no alert
Six of those per night. The watch writes each check to a nightly file, and I glance at the week's files on Sunday — a 30-second skim to confirm the numbers are moving and the watcher is alive. The design rule is the same one I use for the heartbeat monitoring in the 8-10 hours case study: alert on exceptions, not on normalcy. If a monitoring job messages you every time things are fine, you start ignoring it within a week. Then it stops being monitoring and becomes spam you pay for.
Over 34 nights, the watch sent exactly 3 alerts. Here's what each one did.
Alert 1: the false positive (02:14, July 19)
ALERT: LIS-BOS €498 — below €520 threshold
I saw it at 06:40 and opened the booking page before coffee. The fare was real. The fare was also useless: a basic-economy ticket, no checked bag, and the "one stop" was an 11-hour overnight layover that technically kept the routing legal under my filter. Add the bag (€120) and it was €618 — inside the normal band, on a worse itinerary.
The bug: my fare filter checked the headline price first and applied the bag/routing rules second, on the comparison step. The alert fired on the raw number. The watch was doing what I told it to do, not what I meant.
The fix, deployed the same morning: normalize every fare to a comparable total (price + mandatory bag fee) before it touches the thresholds, and reject any layover over 4 hours outright. The watch re-ran the July 19 fare under the new rules: €618, within band, no alert. Correct.
Cost of the false positive: one 20-minute morning detour. Cheap lesson.
The nights it watched nothing (August 4–6)
This is the failure I didn't catch live, and it's the one that matters.
Sometime on August 4, the fare source started returning a consent page instead of results. The watcher's parser found zero fares, and the script treated "zero results" as "nothing changed." No alert, no error, just clean-looking log lines saying no change. For three nights — 18 checks — the watch ran on schedule and watched nothing at all.
I caught it on the Sunday skim, August 9, because three consecutive nightly files had identical numbers. Real prices never sit still for 72 hours. That pattern was the tell, and noticing it depended on me doing a manual review — which means for three nights there was no monitoring, only the appearance of it.
This is the same class of failure as the empty executive briefs in the market research post: the summary layer treated "no data" as a normal day. Two different agents, same blind spot. The fix was the same shape too: a parse that returns zero fares is now a failed check, and two consecutive failed checks trigger an alert about the watcher itself. The monitor now monitors the monitor.
Did the gap cost me anything? I replayed a fare history tool over those dates afterward: prices stayed between €628 and €655. No dip missed. Luck, not design.
Alert 2: the real one (04:07, August 15)
ALERT: LIS-BOS €512 (bag incl.) — below €520 threshold
Comparable fare, one stop, 13h 40m total, bag included. I checked it at 07:00 against two other sources to confirm it wasn't a stale cache, and booked it at 07:20. By that evening the fare was back at €639.
Savings against the €640 I'd have paid booking blind in early September: €128. Against the €660 peak the route touched in late August: €148.
Alert 3: the ceiling tap (July 30)
One alert fired on the high side: €761 on July 30, briefly above the €750 ceiling, back to €652 two checks later. I did nothing, correctly. But it was useful signal — it told me the route's price floor was rising as October filled up, which is part of why I pulled the trigger immediately on August 15 instead of waiting for a bigger dip.
The verdict
What it saved: €128 on the fare, plus the checking habit. Manually, this job is 5 minutes twice a day for 5+ weeks — about 6 hours of scattered tab-checking, realistically abandoned by week three, which is when the dip happened. Total human time on the watch across 34 nights: roughly 90 minutes, most of it the two fixes.
What it missed: Three nights of silent failure in August, caught only by a manual skim. And the watch window itself has a hole: a fare-history replay showed a €489 dip on July 22 around 14:00 — mid-afternoon, outside the overnight schedule, gone before the next check. I chose overnight-only to keep the job quiet, but price dips don't respect my sleep schedule.
What I'd tune next: Run the watch every 3 hours around the clock instead of overnight-only — the alert-on-exceptions rule means more checks don't mean more noise. Add a second route I fly often to amortize the setup. And port the zero-results-is-failure fix back to every other watcher I run, because that bug is almost certainly sitting in at least one of them right now.
The pattern across this series keeps repeating: the agent does the boring part perfectly — 204 checks, on schedule, every line logged — and fails in the seams between "ran" and "worked." The fix is never a smarter model. It's treating silence as a signal worth checking.
The whole job runs on my own server, which is the other half of the story — the fare queries, thresholds, and logs live on infrastructure only I touch, same setup I describe in what a personal AI agent on your own server actually means. When the watch misfires, the incident report is a file I can read, not a support ticket.
Receipts
Every number above traces to a file the agent wrote:
- Watch config:
brain/atlas-ally/watches/lis-bos/config.yaml(thresholds €520/€750, schedule 22:00–08:00, fare filters) - Nightly logs:
brain/atlas-ally/watches/lis-bos/2026-07-*.logthrough2026-08-*.log(34 files, ~6 checks each) - False positive alert:
brain/atlas-ally/watches/lis-bos/alerts/2026-07-19-0214.md(€498 raw, normalized €618 post-fix) - Silent-gap evidence:
brain/atlas-ally/watches/lis-bos/2026-08-04.logthrough2026-08-06.log(identical "no change" lines, zero parses) - Buy alert:
brain/atlas-ally/watches/lis-bos/alerts/2026-08-15-0407.md(€512, booked 07:20) - Ceiling alert:
brain/atlas-ally/watches/lis-bos/alerts/2026-07-30.md(€761, no action taken) - Watcher-health fix:
brain/atlas-ally/watches/lis-bos/CHANGELOG.mdentry 2026-08-09 (zero-parse now fails the check; two consecutive failures alert on the watcher itself)
Atlas Ally is a personal AI agent that runs jobs like this 24/7 on your own dedicated EU server — overnight watches, morning briefs, inbox triage — with every check logged and alerts only when something crosses your threshold. Start a free 7-day trial, no card required.