
Lately I keep seeing some version of this warning: don't use agents to replace your relationship with your kid. I agree, 100 percent. I love my kid and want to spend time with her. But the one thing I don't want to do is wade through the school portal, clicking a thousand times through its terrible user experience, trying to organize the information so I can best help her. So I'm using an agent to get rid of that senseless toil. It cuts the time I spend frustrated and annoyed, organizes the information, and makes it actionable. That frees me up to spend more quality time with her, fully engaged, walking her through the joys of math. Yes, the joys of math.
The problem
My daughter is in middle school, taking accelerated coursework. Middle-school executive function being what it is, a lot of kids that age have a kind of time-blindness about anything that isn't due tomorrow. The common failure goes like this. Anything without a digital submit button (an in-class quiz, a paper packet) doesn't register as homework, so "no homework" at dinner turns into cramming the night before a test.
Most of what she needs to know is in the school's learning management system. Getting it out means logging in, clicking into each course, opening each assignment, and checking dates one at a time, and then doing it all again later, because teachers update things behind the scenes, sometimes at the last minute. On top of that, she goes to an IB school, so everything comes in a vocabulary that was new to me: formative assessments, summative assessments, learning experiences, each with its own grading rubric. When I was a kid, all we had were quizzes, tests, and homework. (If you have a kid in school, you probably know the kind of portal I mean. I'm not going to name it.)
The use cases
There are two.
1. Keep me current on the portal. Every school day, without logging into anything, I wanted to know what's due in the next day or two, what's coming in the next week or so, and what changed since the last check. So the agent scans the portal twice a day and sends me an email each morning and each evening. Critically, every email leads with the connection status and the time of the last sync, so I know whether what I'm reading is current.
2. Daddy's Morning Math. My daughter is in advanced math, and I love math, and I love her, and I want to spend time with her. So I built a fun little thing called Daddy's Morning Math: a short, tween-friendly worksheet that frames the concepts around things she loves, so she can relate to them. It's printed before breakfast, and while she eats, we sit down and chat about math. (In reality, there are plenty of eye rolls and long stares into the middle distance. She's a tired kid trying to eat breakfast while her dad gets very excited about linear equations. The worksheet even has an Eye-Roll Rating in the header; the one below scored a 6.8 out of 10. 🙄)
What I built
The whole thing runs locally on Hermes Agent, from Nous Research, on an always-on machine at home. Hermes keeps its session state in SQLite and runs scheduled jobs itself, with no cloud wrapper.
The configuration lives in three places:
~/.hermes/config.yaml: core agent preferences and execution permissions.~/.hermes/.env: model provider credentials (vLLM, Anthropic, OpenRouter, and so on).~/.hermes/skills/: the two skills that do the work,school-scannerandmath-generator.
One cron job, created with hermes cron create, runs at 6:00 AM and 4:00 PM, Sunday through Friday (0 6,16 * * 0-5). The 6:00 run does the overnight diff, sends the morning email, and prints the worksheet. The 4:00 run captures the end-of-school-day state and sends the evening email, so the next morning's diff has something to compare against.
Getting past the login
School portals mostly don't have APIs, and they enforce MFA and session policies that make scripted logins miserable. So I don't script the login.
Instead, Chrome runs with remote debugging turned on, pointed at its own profile directory:
"/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" \
--remote-debugging-port=18800 \
--user-data-dir=~/.hermes/browser-profiles/school-session \
--no-first-run --no-default-browser-check \
"https://app.schoolportal.com"
I signed in by hand once in that window, MFA and all. The cookies and tokens persist in the profile directory, so every scheduled run reuses that session. (A separate profile directory isn't optional anymore, either: since Chrome 136, Chrome ignores --remote-debugging-port on your default profile.)
From there, a Python client does the work over the Chrome DevTools Protocol:
Connects to
127.0.0.1:18800over WebSockets.Navigates to each active course and runs DOM queries with
Runtime.evaluate.Pulls out assignment titles, due dates, submission flags, and rubric definitions.
Reads the session cookies with
Network.getCookiesand uses them to download attached PDFs (the teachers' study packets) to local storage.
Diffing the portal
Each run saves a timestamped JSON snapshot (for example, 2026-10-06_0600.json) and compares it with the previous one. It flags moved assessment dates, rubric changes, and changed submission requirements. The goal is to see upcoming tests and rubric updates four to eight days out, instead of the night before. The snapshots also leave a dated record of every change, which helps hold teachers accountable, too: when a test date moves or a rubric changes at the last minute, I can see exactly what changed and when.
Both emails are organized like this:
Sync status: the connection status, the time of the last sync, and which courses were checked. This comes first in every email.
What changed: everything that's different since the previous scan.
Next 24–48 hours: what's due right away, and the day's schedule.
Lookahead (3–8 days): early notice on upcoming exams.
Attachments: links to, or copies of, any new packets the teachers posted.
Here's what this morning's email looked like (school and portal names blanked out):
The breakfast worksheet
Every school morning, a ten-minute Daddy's Morning Math worksheet aimed at whatever's coming up in class is sitting on the printer before breakfast.
Here's a recent one, front and back (names changed):
I didn't want to maintain a multi-gigabyte TeX installation for this, so the generator is plain HTML. The page CSS pins everything to exact Letter dimensions, with zero page margins, so nothing spills onto a third page:
@page {
size: letter portrait;
margin: 0;
}
.page {
width: 8.5in;
height: 11in;
max-height: 11in;
padding: 0.45in 0.55in;
page-break-after: always;
display: flex;
flex-direction: column;
justify-content: space-between;
overflow: hidden;
}
KaTeX (renderMathInElement) typesets the formulas. Coordinate grids and function plots are inline SVG, which is vector, so they print as sharp as the printer allows, with no plotting library involved.
The same Chrome instance turns the HTML into a PDF:
pdf_data = cdp('Page.printToPDF', printBackground=True, paperWidth=8.5, paperHeight=11)
with open("/tmp/morning_math.pdf", "wb") as f:
f.write(base64.b64decode(pdf_data['data']))
And CUPS sends it to the network printer, double-sided:
lp -d Brother_Printer -o sides=two-sided-long-edge -o media=Letter /tmp/morning_math.pdf
The stack
| Component | Technology | Role |
|---|---|---|
| Compute host | Always-on host (macOS / Linux) | Local process manager and cron runner |
| Agent core | Hermes Agent (Nous Research) | Task orchestration, LLM inference, scheduling |
| Browser runtime | Google Chrome (--remote-debugging-port) |
Reuses the signed-in portal session, runs DOM queries, generates PDFs |
| Typesetting | HTML5, KaTeX, inline SVG | Lightweight, predictable two-page print layout |
| Print spooler | CUPS (lp command-line utility) |
Automatic double-sided network printing |
The result
I'm up to date on her schoolwork with less effort. We have custom-tailored math worksheets that we sit down with, talk through, and review together, and we get to do it fully engaged and have a good time (eye rolls included). I think it's a pretty cool solution, and it shows the practical things agents can do to help people in their daily lives.
If you've built something like this for your own family, or you think I've gone overboard (it's possible), I'd love to hear about it.
AI attribution: 3/4 — Human-originated, AI-shaped. What this means
Jason Vertrees is the founder of Heavy Chain Engineering, which helps lower middle-market vertical SaaS companies and PE firms turn scattered AI usage into measurable delivery leverage — 85% faster feature velocity, six-to-eight-week projects shipped in days. If you want help building an AI-native engineering organization, book an AI Delivery Assessment or email jason.vertrees@gmail.com.

