It reads your calendars and the school inbox, writes the week, checks its own work, and sends it. You write no code at all.
This is the text. The email version is the archive, for when somebody asks what it said about Thursday.
Moira Rose · Sunday 10:47
Evening, all.
Week: Mon 6 to Sun 12 Oct.
Mon: Both of us home. Swimming 4pm.
Tue: Parent A in the office. Library books go back today. Guitar 5pm.
Wed: Both of us in the office, helper on the full morning from 6:45 🙏. Nobody has the 3:15 pickup yet. Sort this one tonight.
Thu: Home. Excursion form and $14 due today, online.
Fri: Free dress day, gold coin. Football 4:30pm, far ground.
Sat: Nothing on.
Reminders: excursion $14 due Thursday. Free dress Friday, gold coin.
Radar: term ends Friday week, then two weeks at home.
The line that matters is the Wednesday one. Nobody has the 3:15 pickup, and it says so rather than guessing. That is a rule you write, not something the model worked out.
Estimates, per month, in US dollars, for a household texting three phones. You pay these to the companies listed, directly, on your own accounts. None of it comes to me. Nothing here is for sale.
| Thing | Cost, USD |
|---|---|
| Twilio phone number | $8.25 |
| Text messages (about 15 segments per phone, 4.3 Sundays) | $10.05 |
| Anthropic API (one model writes, a cheaper one checks) | about $1.50 |
| GitHub Actions (about 5 minutes a week, free tier is 2,000) | $0 |
| Vercel, for the calendar filter (hobby plan) | $0 |
| Gmail, Google Calendar | $0 |
| Total | about $20 |
Two phones instead of three brings it to about US$16. The AI is the cheapest part of this, which surprises everyone. The texts cost six times more than the thinking does.
These are my numbers, not a quote. They were what I paid in September 2026, in US dollars, for a household in Australia. Prices change, they differ by country, and a chattier week costs more than a quiet one.
Check the current pricing on each provider before you commit to anything, and set a spend limit on the Anthropic key while you are there. You are the account holder on all of it, so you can turn any of it off at any point.
One lever worth knowing. A single emoji switches a text message to a different encoding, where each billed segment holds 67 characters instead of 153. That roughly doubles the cost of every text you send.
Keep them for the two or three that carry real meaning, or drop them from the text and keep them in the email, which costs nothing either way.
One thing to install, then a handful of accounts. Nothing here is hard, but every one of them will ask you to verify an email address.
The digest is a small program, and Node is the free thing that runs it on your computer. You install it once and then never think about it again.
Open a terminal. On a Mac, press Command and Space together, type Terminal, press Enter. On Windows, press Start, type PowerShell, press Enter. A window opens with a blinking cursor. That is all a terminal is.
Type this and press Enter:
node --version
One of three things comes back.
v20.12 or anything higherv22, v24 and so on | You are done. Close the terminal and carry on down this page. |
| A lower number v18, v20.9 | Install the new one over the top, below. It replaces the old one. |
command not found | Node is not installed yet. Same steps, below. |
To install or update it: go to nodejs.org and press the big green button marked LTS, which stands for the boring dependable version and is the one you want. Open the file it downloads and click through the installer, taking every default. Then close the terminal and open a new one, because an old terminal window keeps looking in the old place. Run node --version again and you should see the new number.
If a command later fails with bad option: --env-file-if-exists, this is the cause. It reads like something is badly broken and it only means Node is older than 20.12. Install the LTS version, open a fresh terminal, and run the command again.
| GitHub | Free. |
| Anthropic API key | From console.anthropic.com. Pay as you go, about US$1.50 a month. |
| Twilio | With one phone number in your country. |
| Gmail app password | Not your normal password. A 16-character code you generate for this, and can revoke without changing anything else. |
| Vercel | Free, and only if you want the school calendar filter. |
| Your calendar's secret iCal address | Google Calendar: Settings, your calendar, Integrate calendar, "Secret address in iCal format". |
You do not have to read the code. Hand the repository to Claude and let it walk you through setup, one step at a time.
Make your copy private. Your household's routine is about to be written down in it.
Download the repository as a zip, start a chat at claude.ai, attach the zip, and paste the prompt below. Claude reads every file and tells you exactly what to do. When a step needs a command, it gives you the line to copy.
Install Claude Code, open the folder in it, and paste the same prompt. Claude runs the commands itself, reads the output, and fixes what breaks without you copying anything back and forth.
I am setting up this home-ops repository, which sends my household a weekly digest by text every Sunday. I have never set up anything like this. Assume no technical background and explain any word you would not say out loud to a friend. Before you say anything, read README.md, then CLAUDE.md, then the five files in _shared/. Then follow the setup in README.md with me. How I want you to work with me: 1. One step at a time. Tell me what we are doing and why it matters, give me the exact thing to do, and then stop and wait for me. Do not give me steps 3 through 7 at once. 2. After each step, give me the check from the README and ask me what I see. If what I see is wrong, work out why before we go on. Do not tell me to continue anyway. 3. Never ask me to paste an API key, a password, a phone number or any secret into this chat. When one is needed, tell me which file or which website field to put it in, and I will do it myself and tell you when it is done. 4. When we reach the five files in _shared/, interview me about my household instead of making me fill in templates. Ask about who lives here, who does drop-off and pickup, which days people are out, what the standing activities are, which calendars and which email senders matter. Ask a few questions at a time, not thirty. Then write each file for me, show it to me, and change whatever I do not like before we move on. 5. Tell me what each step costs, in money or in time, before I do it. 6. Stop before anything sends. The first thing that reaches my family should be something I have read first. Start by telling me what I will have at the end, what it costs to run per month, and the accounts I need to open. Then ask me which of those accounts I already have, and we will begin.
Every step ends with something you can check. If the check does not pass, stop, because every later step assumes this one worked.
Use this template, then create a new repository. Make it private. Clone it to your machine.
ls shows _shared/, stages/, tools/.This reads a fake calendar that ships with the template. No keys, no accounts, nothing sends.
cd tools/digest-runner npm install npm run gather:test
Open _shared/. Five files, and they are templates rather than examples. Every bracket is yours to replace. If you only skim one, skim sources.md, because it decides what this thing is allowed to read.
The server keeps time in a different zone to your family. This is where you tell it which one is yours.
The secret iCal address of your family calendar, and the school one if you have it.
npm run gather:live lists events you recognise. It gathers only, and sends nothing.Most schools publish one calendar for the entire school. The filter drops everything that is not your year level and hands back a clean feed your calendar subscribes to. Optional, and the rest works without it.
npm run preview runs the entire Sunday on your real data and stops before sending. Read what it wrote.
---VERIFY--- section. Ideally it says "No findings."Settings, Secrets and variables, Actions. GitHub never shows a secret back to you after you save it, so keep your own copy somewhere safe.
Actions tab, choose "Sunday family digest", press Run workflow. After that it runs itself, late Sunday morning, until you turn it off.
This is the whole difference between a system that improves and a chatbot you argue with every Sunday.
Every correction becomes a line in a file. Never a fix to that week's message.
When the message gets something wrong, the instinct is to retype the line and move on. Do that and you will retype it again next week, and the week after, until you quietly stop using the thing.
There are only two places a fix can go, and telling them apart is the skill.
"It attached last week's class photo email to next Monday." The email was sent on a Thursday and said "Monday". No code can decide that, so it becomes one line in rules.md: a day named in an email is relative to the day that email was sent.
"It said football was at 7am. It is at 5pm." No rule fixes a clock. That one goes in tools/, with a test that fails if it ever comes back.
Sort your own mistakes into those two piles for a month and you will know exactly which half of your system is thinking and which half is plumbing. Most people never find out, because they fix everything in a chat window and the chat forgets.
It will. Fifteen things broke before this one held.
You get a text saying the run failed, with a link. That is deliberate. A silent missing digest is the worst outcome, because you assume you had a quiet week. Open the link and read the red step.
If a push is refused because of the workflow file. You may see refusing to allow an OAuth App to create or update workflow. It reads like a problem with your account, and it is not. Anything that pushes a change to .github/workflows/ needs the workflow scope, and your token does not have it yet.
Fix it with gh auth refresh -h github.com -s workflow, then push again. In a browser, a personal access token needs workflow ticked alongside repo.
| Folder | What it holds |
|---|---|
| _shared/ | The factory. Five files, plain English, edited by hand. The rules, the voice, the shape, the household, the sources. |
| stages/01_weekly-digest/ | The stage contract, and runs/: what actually went out, every week. |
| tools/digest-runner/ | The Sunday job, the checks, and the eval. |
| tools/calendar-filter/ | The school calendar filter, deployed separately. |
| outputs/ | Previews and dry runs. Nothing reads from here. |
CLAUDE.md in the root is the map, and it routes you by what just happened. Every folder has a CONTEXT.md explaining itself.