The daily activity card
● last worked on 2026-08-20 · weekly_planner.py
A job that runs on a schedule and writes one themed activity card a day for young kids, drawing on what is happening locally and a hand-built bank of activities.
the decision, and what we'd switch to
Our decisionBuilt it. This is the product, and it is also why the lab exists — we learn how to run AI agents by running this one every single day with a real family on the other end of it.
The alternativeBuying the experience instead: KiwiCo boxes, Khan Academy Kids, Highlights magazine. All real, all perfectly good. None of them teach you how to build a governed agent, and none of them will run our safety checks.
Why we'd switchNothing. Building it is the point.
CostFree — our own code on hardware we already own.
MaintenanceConstant. It is the thing we keep improving.
The safety check every card must pass
last worked on 2026-08-17 · tools/content_gate_roster.py
Code that screens every card against an approved list before it can be sent, and refuses to send when anything is uncertain rather than letting it through.
the decision, and what we'd switch to
Our decisionBuilt it. Being safe around kids is a condition of running at all, not a feature we score out of ten. An instruction written to a model is a request; code is a rule. This is code.
The alternativeContent-moderation services — OpenAI's moderation endpoint, Google's Perspective API, Azure AI Content Safety. All real, all rejected here: they catch general nastiness, not "this household does not do hot glue guns", and this check has to run where the data already is.
Why we'd switchNothing for the check itself. The models it screens with can be swapped out freely.
CostFree — our own code.
MaintenanceRevised whenever the approved list is signed off again.
The no-repeats picker
last worked on 2026-08-01 · tests/test_theme_selector.py
Memory that survives between runs, plus a picker that generates several candidate cards and keeps the one furthest from what the family already got — so nobody sees the same card twice, or five versions of one theme in a week.
the decision, and what we'd switch to
Our decisionBuilt. "It does not repeat" is the family's actual quality bar, and no product on earth knows our history or our theme list.
The alternativeNo product to choose. The alternative was writing "please be varied" into the instructions and hoping — which cannot be checked, so it is not a control.
Why we'd switchNothing.
CostFree — our own code.
MaintenanceLow.
The list of what is safe for kids
last worked on 2026-07-28 · safety_taxonomy.json
The approved materials and activities for a child of this age. Written and signed by the human operator, and version-numbered so you can tell which one was in force on any given day.
the decision, and what we'd switch to
Our decisionThe human writes this one, not the AI. Where the question is what a child gets exposed to, a person has to be the author. An agent may set up the file format and nothing else.
The alternativeLetting the AI draft the list and having a person approve it. Real, common, and rejected: approving a list you did not write is rubber-stamping, and this is the last place you want that.
Why we'd switchNothing. A person writes this one, permanently.
CostFree — human time.
MaintenanceThe human re-reads and re-signs it periodically.
The theme list, and a check that we really cover it
quiet 37d last worked on 2026-07-20 · hooks/checks/taxonomy_lint
A short vocabulary of themes — water, building, music, and so on — plus an automatic check that the activity bank actually holds enough of each one before the variety features are allowed to switch on.
the decision, and what we'd switch to
Our decisionBuilt. Picking varied cards is only as good as the labels underneath them, so "the labels work" had to be something we could check rather than something we assumed.
The alternativeLetting a model compare activities by meaning and drop the near-duplicates — the standard approach, and every vector database sells it. Put off: a parent cannot inspect why two things were judged similar, and at a few hundred activities it is more machinery than the problem needs.
Why we'd switch◉ Labels keep coming out wrong even after we tidy them up. Then a model gets to suggest a label — as a hint, never as the decider.
CostFree — our own code.
MaintenancePeriodic tidying as the activity bank grows.