← Building Your Chief

Build It Yourself

One capability of a personal AI Chief of Staff at a time, as a single markdown brief: what it does, the design in fifteen lines, the traps we hit building it (the part that actually costs weekends), and prompts you paste into Claude Code, step by step. Free. Written from a system that runs a real household on WhatsApp — the one this newsletter is about.

Brief 00

Start here — an always-on machine and an assistant that messages you

Every other brief in this series quietly assumes two things you may not have: a computer that never sleeps, and a chat thread where your assistant can reach you and you can answer back. This brief builds exactly that, in one evening, using **Telegram** — ten minutes, no business account, no QR pairing, no credit card. You end up with a `notify` command any script on the machine can call, and a small bridge that pipes your replies into Claude Code and sends the answer back. Nothing downstream is Telegram-specific: from here on, every brief only needs "send me a line" and "a reply comes back".

one evening (2–3 h), much of it waiting for downloads · tested on Claude Code (Aug 2026) · Node 22 · macOS 15 · Telegram Bot API (Aug 2026)

Brief 01

Never refresh the gym app again — a slot watcher that proposes and books

Your studio's booking app is bad and the good slots vanish in minutes. This brief builds a watcher that logs into the app's API *as you*, notices newly opened classes at your level, and sends you **one short WhatsApp proposal** when a slot matches the times you actually go ("a spot opened Tuesday 18:00 — book it?"). A "yes" books it. It also knows your monthly quota, stays quiet when you already train that week, and never spams. We built it against Arbox (a common gym/studio platform in Israel); the design transfers to any app with a JSON API behind it.

one evening (3–4 h) for watch + propose; +2 h for the booking write path · tested on OpenClaw 2026.6.11 · Claude Code (Aug 2026) · Node 22 · macOS

Brief 02

Reminders that don't rest until it's done

Give your AI assistant real reminders: "remind me Sunday about the bank form" in WhatsApp → it fires **in the same chat**, in the assistant's own voice, re-nags if you ignore it, and understands "got it" — without a to-do app, without a cron per reminder, and without the assistant ever *claiming* it sent something it didn't. This brief is the design, the traps we hit building it, and the prompts to paste into Claude Code.

one evening (3–5 h) if you already have a WhatsApp-connected agent · tested on OpenClaw 2026.6.11 · Claude Code (Aug 2026) · Python 3.12 · macOS

Brief 03

Leave-now alerts — and a real phone call for the ones that matter

Every calendar event with a location gets a heads-up ~40 minutes before it starts: a spoken announcement in the house, a WhatsApp message with a one-tap map link, and — for the events that actually matter (a flight, a doctor, a hospital) — a real outbound **phone call** from an AI voice, because a WhatsApp notification is exactly the kind of thing you silence on your way out the door. This brief is the design, the traps, and the prompts to build your own.

one evening (2–4 h); +1–2 h if you wire up the phone-call escalation · tested on OpenClaw 2026.6.11 · Claude Code (Sep 2026) · bash + jq · macOS

Brief 04

The morning board — your day on the TV, and in the room, while you make coffee

Twenty minutes after you wake up, the TV in the living room turns itself on and shows one screen with your whole morning on it — today's calendar, the to-dos that are actually yours, the weather, a few headlines — while a speaker reads you a 40-second version out loud. You stop opening five apps before your first coffee. This brief is the design, the traps (most of them are about *getting a picture onto a TV that is asleep*), and the prompts to build your own.

one evening (3–4 h) for the board on screen; +1 h for the voice and the wake-up trigger · tested on Claude Code 2.1 (Oct 2026) · Node 25 · Playwright 1.58 and 1.63 (Chromium) · catt 0.13 · macOS 26 — steps 1–3 and 5 built and run by a fresh headless session on sample data (1–3 re-run after fixes); step 4 run in --dry mode with real device discovery (TV wake + cast not exercised in the test)

Brief 05

The house notices you — presence greetings from your phone

Your phone already knows when you get home, leave, and switch off your alarm. Teach it to tell your assistant, and the house can answer: a "welcome home" on the speaker twenty minutes after you walk in, a "good morning" after your alarm, a warm hello when you are *both* finally home. No app to install, no open port on your router, no domain. This brief is the pipeline (phone → relay → machine → speaker), the small state machine that decides when to speak, and the traps — most of which are about phones that stay locked and voices that cost money.

one evening (2–3 h) for the pipeline; +30 min per phone for the automations · tested on Claude Code 2.1 (Oct 2026) · Node 25 · macOS 26 · ntfy.sh (live relay) — steps 1–3 built and run by a fresh headless session (real relay, rules on a fake clock, voice cache against a stub voice API, audio rendered to file); step 4 (iPhone) written but not run on a device

Brief 06

The feeder that tells you how they actually ate — pet stats and alerts

A smart pet feeder knows how much it *dropped*, and a scale under the bowl knows how much is *left*. Neither number is "how much they ate" — and the app that ships with the feeder will happily show you the wrong one. This brief turns your feeder into a small honest data source: a daily log that outlives the device's own history, a handful of plain-arithmetic conclusions ("down 22% on last week, two days under the recommended range"), alerts that fire only when something is actually wrong, and one short weekly note written by an LLM that is allowed to talk *only* about those numbers. Most of the brief is the traps, because nearly every sensor on a feeder means something slightly different from its name.

one evening (3 h) for the numbers and alerts; +1 h for the weekly note and the wall page · tested on Claude Code 2.1 (Oct 2026) · Node 25 · macOS 26 — steps 1–4 built and run by a fresh headless session (Home Assistant replaced by a local HTTP stub and a fixtures file, LLM replaced by canned replies, notify.sh faked, clock faked with --at); step 5 (scheduler and wall page) written but not run

Brief 07

"Find a time with Alex: your assistant coordinates meetings across people and calendars"

You type one sentence — *"find a time with Alex next week, 45 minutes"* — and the assistant reads your calendar, picks three slots, offers them to Alex in chat, understands the answer, sends the invite from **its own** calendar, and reminds everyone the day before. The interesting part is not the happy path, which any demo can do. It is the seam between the LLM (who understands "Thursday afternoon works, or Sunday?") and the code (which must own dates, weekdays, retries, who-gets-told and how many messages a human receives). We ran this conversation as two language models talking in prose and it produced thirty-three messages in half an hour. This brief builds the version where the model only gets the judgment slice.

one weekend (6 h) for slots, state and the guest gate; +2 h for the real calendar and chat wiring · tested on Claude Code 2.1 (Oct 2026) · Node 25 · macOS 26 — steps 1–8 built and run by a fresh headless session (calendar replaced by fixtures and a local HTTP stand-in for the Google API, LLM replaced by canned and deliberately lying answers, chat transport written to log files, clock faked); step 9 (scheduler and chat wiring) written but not run

Brief 08

"Ask the hard question from your phone: deep research on demand, answered while you do something else"

You send one message — *"which e-bike for a 12 km commute with two steep hills, budget 2,500?"* — and the assistant answers in one line: "On it, back in a few minutes." Behind that line a separate headless Claude Code run grinds for as long as the question needs: searches, reads pages, compares, writes a note you can reopen later. Then the answer lands back in the same chat. The research itself is the easy part. What this brief builds is everything around it that decides whether you can *trust* the silence in between: a job inbox, a runner that cannot hang or die quietly, a result file that exists even when the run failed, a delivery that is proven by a real message id, and a watchdog with no model inside it. We lost days to each of those before they worked.

one evening (4 h) for the queue, runner, result guarantee and delivery; +1 h for the watchdog and the chat wiring · tested on Claude Code 2.1 (Oct 2026) · Node 26 · macOS 26 — steps 1–6 built and run by a fresh headless session (the claude CLI replaced by a fake script with five outcomes, chat sender replaced by a fake notify script and a log file, no network or paid API, hang case run with a 2–3 s cap override); step 7 (scheduler and chat wiring) written but not run

New brief, one email

Same list as the blog: a new brief or post, once a week at most. Double opt-in, unsubscribe anytime.

How to use a brief

  1. Download the .md, drop it in an empty folder, open Claude Code there.
  2. Say: "Read this brief. Ask me the prerequisite questions, then build step 1."
  3. Run the check at the end of each step before the next one. The traps section is not optional.
  4. You get something similar, shaped for your house — not a copy of ours.

Licensed CC BY 4.0 · Want the whole playbook? The Starter Kit waitlist.