manage
Skill8 starsChanged 44 days agoMITView on GitHub
Manage an installed Parent Recap: check how it's running, troubleshoot "no Brief arrived / summary failed / calendar not written / WhatsApp group missing", change Kid details, move up a grade, switch groups, connect a Source skipped in setup (MyClub, Wilma), add recipients, change someone's language, turn Weekend Picks on or off, turn a WhatsApp group's digest (a few lines on its other talk) on or off, turn pilot feedback (⭐ / ❌ links) on or off, turn the AI filter (placeholders for other people's names, phone numbers, email addresses and links, and sensitive messages held back) off or on, re-authorize Gmail / Claude / Codex / Google Calendar / Wilma, enter a new Gateway Key, switch between Claude, ChatGPT and Parent Recap's gateway, send the Brief from their own Gmail or from Parent Recap's address again, upgrade to a new version or uninstall ("uninstall Parent Recap", 「卸载 Parent Recap」). Use when the user mentions Parent Recap, FamilyBrief, Family Brief or 家庭日报 having a problem or needing a settings change, or repeats a line from their Brief such as "Parent Recap can't read WhatsApp", "FamilyBrief can't read WhatsApp", "check Parent Recap", "check FamilyBrief", 「Parent Recap 读不了 WhatsApp」, 「检查 FamilyBrief」 or "tarkista Parent Recap".
- Reads credentials
6 other projects use a version of this.
Adopted by
Most recently taken up by
- jskswamy/skillstheir own version, first seen Nov 8, 2026
- AvyanshKatiyar/openai-ads-mcptheir own version, first seen Oct 15, 2026
- divanc/skillstheir own version, first seen Oct 13, 2026
- monoscope-tech/skillstheir own version, first seen Jun 11, 2026
- getlark/skillstheir own version, first seen May 18, 2026
- nicholasglazer/gnosis-mcptheir own version, first seen Apr 17, 2026
Other versions6 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 6
- nicholasglazer/gnosis-mcp★ 30same name
- monoscope-tech/skills★ 4same name
- divanc/skills★ 3same name
- jskswamy/skills★ 3same name
- getlark/skills★ 1same name
- AvyanshKatiyar/openai-ads-mcp★ 0same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository27 other files it gives its agents.
- CLAUDE.mdCLAUDE.md
- ask-mattSkill
- codebase-designSkill
- code-reviewSkill
- diagnosing-bugsSkill
- domain-modelingSkill
- grillingSkill
- grill-meSkill
- grill-with-docsSkill
- handoffSkill
- implementSkill
- improve-codebase-architectureSkill
- prototypeSkill
- researchSkill
- resolving-merge-conflictsSkill
- setup-matt-pocock-skillsSkill
- tddSkill
- teachSkill
- to-questionnaireSkill
- to-specSkill
- to-ticketsSkill
- triageSkill
- wait-whatSkill
- wayfinderSkill
- wizardSkill
- writing-for-agentsSkill
- setupSkill
The file
We split this skill into the rules it gives an agent
8 rules. 0 are common, 2 are distinctive, and 6 are very specific to this project.
0
Common
Most of the 5 edited versions we read keep these.
2
Distinctive
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 12
If ~/.family/config.yaml doesn't exist, Parent Recap hasn't been set up yet: use /parent-recap:setup instead, unless the user wants to …
- Very specific: line 18
Don't print mail or chat text: diagnose with $FB doctor and the last few lines of the logs.
- Distinctive: line 25
When a Source can't be read, the Brief tells the user what to say to you.
- Very specific: line 80
After changing the config, run $FB doctor once and confirm there's no ❌.
- Very specific: line 96
Run $FB uninstall. It removes nothing yet: it lists everything setup created on this Mac.
- Distinctive: line 97
If it ends with ❌ Stopped, it found something in Parent Recap's places that isn't this install's, such as an older install's scheduled job.
- Very specific: line 99
Only once they confirm, run $FB uninstall --confirm --keep-archive, or --remove-archive if they chose to remove it.
- Very specific: line 108
If the two version numbers differ, the plugin has been updated but the program hasn't caught up.
“Common” is measured: kept by at least 6 in 10 of the 5 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Parent Recap management
Reply in the language the user writes in, not the language of this skill: English if they write English, Chinese if they write Chinese, and switch if they switch. That never changes the language their Brief comes in; only an explicit request does (see "Change someone's language" below). In Chinese, call the Brief 日报 and Weekend Picks 周末活动推荐; in Finnish, kooste and viikonlopun vinkit; in English or any other language, say Brief and Weekend Picks. Commands, config keys and file paths stay as written.
FB=~/ParentRecap/app/.venv/bin/parent-recap, PY=~/ParentRecap/app/.venv/bin/python. PLUGIN is the plugin root folder, two levels above this skill's folder (it contains install.sh); if unsure, run ls -d ~/.claude/plugins/cache/*/parent-recap/*/ | sort -V | tail -1; for an install from the release zip, with the install line (get.sh) or with get.sh --codex, ~/ParentRecap/plugin is also the plugin root.
If ~/.family/config.yaml doesn't exist, Parent Recap hasn't been set up yet: use /parent-recap:setup instead, unless the user wants to uninstall (see "Uninstall" below), which also cleans up a setup that never got that far.
Rules (same as setup)
- Secrets (passwords, App Passwords, tokens, Gateway Keys, MyClub calendar links) never go in the chat: the
$FB setupcommands below ask for each in a macOS dialog, check it and store it, and never print it. In Codex, run them outside the sandbox (Codex asks for approval) - The config holds the MyClub links: don't open or print the whole file. View it with
grep -vE 'myclub_ical_url|myclub\.fi/' ~/.family/config.yaml, which leaves out a Kid's several links too, and make changes with commands that don't print the file - Don't print mail or chat text: diagnose with
$FB doctorand the last few lines of the logs; don't run$FB collect - Back up before changing the config:
cp ~/.family/config.yaml ~/.family/config.yaml.bak-$(date +%Y%m%d%H%M) - Commands that need
sudo: only show them, and let the user run them - Never search the family's folders or read their files to find something (a file they were sent, a password, a link): not with
find,lsorgrep, and not by opening a file to see what's inside. Ask the user where it is, or offer the alternative that needs nothing (such as staying with the.icsattachment). Parent Recap's own files and the checks in this skill (the plugin folder,~/.family, the logs) are fine
When the user repeats a line from the Brief
When a Source can't be read, the Brief tells the user what to say to you. Briefs sent before the rename say Parent Recap, newer ones Parent Recap: treat both names the same way, in every language.
| The user says (any of these forms) | What it means and what to do |
"Parent Recap can't read <Source>", "Parent Recap can't read <Source>", 「Parent Recap 读不了 <Source>」, 「Parent Recap 读不了 <Source>」, "Parent Recap ei pysty lukemaan lähdettä <Source>", "Parent Recap ei pysty lukemaan lähdettä <Source>" | The scheduled job was denied permission to read that Source. Run $FB doctor and do what that Source's line says |
| "check Parent Recap", "check Parent Recap", 「检查 Parent Recap」, 「检查 Parent Recap」, "tarkista Parent Recap", "tarkista Parent Recap" | A Source failed for some other reason, such as no network or a timeout. Go through "Check the status first" below and the last lines of ~/ParentRecap/logs/run-stderr.log |
"re-authorize <Source>", 「重新授权 <Source>」, "valtuuta <Source> uudelleen" | That Source's sign-in stopped working: re-authorize it as in "Common tasks" below (Gmail sign-in, Google Calendar authorization or Wilma) |
Check the status first
$FB doctor
$FB schedule statusdoctor shows ✅ / ⚠️ / ❌ for each item, with what to do.
For symptoms and fixes, look up the symptom in the table in PLUGIN/docs/troubleshooting.md.
Common tasks
| What the user wants | How |
| Move up a grade / change class | Follow "New school year" in PLUGIN/docs/config.md: change grade and class_name |
| Add or change a Kid's MyClub calendar | Run $FB setup myclub --kid "<Kid's name>" (the name as under kids:). It opens MyClub and a macOS dialog: the user copies the Kid's calendar subscription link ("MyClub" in PLUGIN/docs/sources.md) and pastes it there; the command downloads it once and saves it in place of the Kid's links. A Kid in several clubs has a link from each club: for another club's, add --another, which keeps the links they have. Don't let the user paste the link in the chat, and don't write it into the config yourself |
| Mail from a school or club isn't in the Brief | Find its sender domain with $FB discover gmail-senders and add it to gmail.allowlist_domains |
| Add or remove a recipient | Change email.to (Brief) or email.weekend_to (Weekend Picks). Ask a new person's language: a plain address reads summary_language, anyone else is {address: ..., language: <code>} ("Recipients in their own language" in PLUGIN/docs/config.md), then run $FB language <code> for it. If the change moves who is first in email.to, say that the Brief is then written in the new first Recipient's language, and Google Calendar events and the archive follow it. The $FB doctor run after the change binds a new address to the Gateway Key, and the server emails it a link to confirm: tell the user the new person opens it (it may be in Junk) and presses Confirm, or gets no Brief |
| Change someone's language ("from now on send my Brief in English") | Only on an explicit request (see the top of this file). If more than one parent uses this Mac, confirm whose address "my" is. Set that entry in email.to (and email.weekend_to, if they're there) to {address: ..., language: <code>}, or back to a plain address if the new language is summary_language, then run $FB language <code>. If it's the first entry in email.to, say that the Brief is then written in that language, and Google Calendar events and the archive follow it |
| Change the Brief time | Change schedule.daily_hour / daily_minute, run $FB schedule install (macOS asks for the Mac password to move the wake-up). It warns that the old wake schedule would be replaced: say it's the one for the old time and, once the user agrees, run $FB schedule install --replace-wake. Give the user the sudo pmset command if it prints one |
| Turn Weekend Picks on or off | Setup doesn't ask about them, so they start off. Weekend Picks only cover Helsinki, Espoo and Vantaa, and Kauniainen families get them too: before turning them on, ask which city the Household lives in, and if it has no Weekend Picks regions in "City presets" in PLUGIN/docs/config.md, say why they'd get nothing near them. Ask what each Kid likes and what the parents want them to try, write it into weekend_events.kid_preferences and parent_preferences, set regions to that city's regions and enabled: true. They go to the Brief's Recipients, each in their language, unless the user names other addresses for email.weekend_to. Then run $FB schedule install, and $FB weekend-events --dry-run once to show a preview. To turn them off, set enabled: false and run $FB schedule install |
| Turn on pilot feedback (⭐ / ❌ links) | Pilot families only. First tell the user every point the parents must know from the "Pilot feedback" section of PLUGIN/docs/config.md, and change the config only once they agree. Then run $FB setup save <<< '{"feedback": {"enabled": true}}': it writes the rest from the pilot form the program ships, with a household_label it makes itself (the team only sees a pseudonym made from it). If it says this version has no pilot form, pilot feedback isn't available yet |
| Turn off pilot feedback | Set feedback.enabled to false |
| Turn the AI filter off or on ("send my messages to the AI as they are") | First tell the user what it does, from "What the AI sees" in PLUGIN/docs/config.md: while it's on, the AI gets the Kids as Kid A, Kid B and placeholders in place of other people's names, phone numbers, email addresses and links, never the Gmail message links or the Wilma student number, and the Brief still shows the real ones. Messages that look sensitive (health, special support, bullying, child welfare) never reach the AI, unless they were sent to everyone, such as Wilma announcements, and the Brief lists them to read where they came from. Turned off, the AI gets the messages as they are, sensitive ones included. To show what it catches in their own messages, run $FB ai-filter-report (see the next row). Change the config only once they agree: set ai_filter.enabled to false, or back to true to turn it on. If they want only the Kids' names to reach the AI, set ai_filter.mask_kids to false instead. It takes effect from the next Brief |
| Check what the AI filter catches ("does the filter work?", "how many names does it hide?", "which messages does it hold back?") | Run $FB ai-filter-report. It reads the archive on the Mac and runs the evening Brief's filter on each evening's messages. It prints counts only: messages held back by category, the names, phone numbers, email addresses and links that become placeholders, and an estimate of names it likely missed. It prints no message text, names or links and makes no network call, so show its output to the user as it is. With the AI filter off, it says what the filter would do. With no archive yet, it says so: the evening Brief adds one evening at a time. To see which messages it holds back, run $FB ai-filter-report --held-back yourself. After the same counts, it writes each held-back message with its date, Source, category, the word that matched, sender, subject or chat, and the text around the word to held-back-list.txt in the archive folder, opens that file in TextEdit on the Mac, and prints only how many it listed and the file's path. Tell the user the list is open in TextEdit, so they can see which words hold back routine notices, such as a teacher's message to every guardian in the class about a talk on bullying. The file holds the messages' own text: never read, print, search or copy it, and don't ask them to paste it into the chat. If the output says TextEdit couldn't be opened, give them the file's path to open on the Mac themselves |
| Switch from ics attachments to writing Google Calendar automatically | Follow "Switch to Google Calendar" below |
| Google Calendar authorization expired | Run $PY ~/ParentRecap/app/scripts/setup_google_calendar.py again in Terminal. New events from while it was expired are already attached to the Brief as .ics, and re-authorizing won't write them twice. If it expires every 7 days with their own app, the app is still in "Testing": publish it following step 4 of "Creating your own Google app" in sources.md |
| Gmail sign-in fails | Run $FB setup gmail. Before it, tell the user what setup tells them ("Gmail" in PLUGIN/skills/setup/SKILL.md): they never give their Google password, they create a new App Password named Parent Recap on the page it opens, and paste the 16 letters into the dialog. It tests the sign-in and replaces the old one in the Keychain |
| Claude summary fails (Credit / 403) | Run $FB setup claude: the user clicks Authorize on Claude's page, copies the token the Terminal window shows into the dialog, then presses Enter in that window. It makes a test call before storing it |
| Codex summary fails (Codex is ❌ in doctor) | The user signs in to Codex again with their ChatGPT account: in the Codex or ChatGPT app, or with codex login for a ~/.local/bin/codex the setup page installed; then runs $FB doctor |
| Gateway summary fails, or a new Gateway Key (AI gateway or Gateway Key is ❌ or ⚠️ in doctor) | ⚠️ "used up today's budget": nothing to do, the key works again tomorrow. ❌ "doesn't know this Gateway Key": it was mistyped, or the maintainers turned it off. Once the user has the key from the maintainers, run $FB setup gateway: they paste it into the dialog, and it makes a test call before replacing the stored one. ❌ "no answer": check the Mac is online, then run $FB doctor again |
| Brief sending is ❌ or ⚠️ in doctor ("not confirmed yet" or "no Gateway Key"), or no Brief arrived after an update | Unless they send it from their own Gmail (next row), every Brief is sent from Parent Recap's own address with a Gateway Key (ADR 0032). With Claude or ChatGPT as the AI, doctor gets a key for sending by itself and the server emails each Recipient a link to confirm (ADR 0033); the Brief goes only to addresses that confirmed. "not confirmed yet": each address it names opens the email from brief@parentrecap.com (it may be in Junk), opens the link and presses Confirm; $FB setup confirm --resend sends it again, $FB setup confirm says who has. "no Gateway Key … couldn't make one": run $FB setup confirm again later. With the gateway as the AI, or if the team sent a key, run $FB setup gateway: they paste it into the dialog, and with Claude or ChatGPT as the AI it is tested for sending only, without sending anything. Then run $FB doctor. The Brief that didn't go out comes the next evening |
| Send the Brief from their own Gmail, or from Parent Recap's address again ("don't send my Brief through your server", 「从我的 Gmail 发日报」, "Lähetä kooste omasta Gmailistani") | An advanced setting, only on the user's request (ADR 0034). Offered only with Claude or ChatGPT as the AI and Gmail connected with an App Password (gmail.username); with the gateway as the AI, say it isn't offered, since the messages already go through the gateway to be written. First tell the user what changes, from "Delivering" in PLUGIN/SECURITY.md: the Brief, the first Brief and Weekend Picks come from their own Gmail address and stay in its Sent folder, nothing passes through Parent Recap's server, replies reach them, nobody confirms anything, and if Google stops accepting the App Password both reading Gmail and sending the Brief stop. Once they agree, run $FB setup sending gmail: it checks that Gmail takes the App Password, sending nothing, before switching. rejected or no-password: run $FB setup gmail first, then again. To go back, run $FB setup sending gateway; when its next says someone hasn't confirmed, follow the row above. Then run $FB doctor: Brief sending says which way the Brief goes, and with Gmail a ❌ there is about the App Password ($FB setup gmail) |
| Switch between Claude, ChatGPT and Parent Recap's gateway | The gateway is only for invited Households with a Gateway Key from the maintainers. Before switching to it, tell the user what "Parent Recap's gateway" in PLUGIN/docs/sources.md says passes through it, and go on only once they agree. Authorize the new AI following the "AI login" section of PLUGIN/docs/sources.md (for the gateway, $FB setup gateway), then change llm.backend (claude, codex or gateway) and run $FB doctor. Switching away from the gateway stops its model calls from the next Brief on; the Gateway Key stays in the Keychain, since it still sends the Brief, so switching back needs no new key |
| Wilma not signed in | Run $FB setup wilma --timeout 540 --language <summary_language>: the user signs in again in the Terminal window it opens |
| Test the scheduled job itself | $FB schedule run-now (--weekend for Weekend Picks); see "Testing the scheduled job" in PLUGIN/docs/troubleshooting.md. It really sends the Brief |
| Send one Brief by hand | $FB bg run --lookback-hours 48 (really sends email). Add --dry-run to only preview. Allow it 15 minutes (or run it in the background); don't retry while it's going |
| Upgrade to a new plugin version | Follow the "Upgrading" section of troubleshooting.md |
| Connect a Source skipped in setup ("add MyClub", "add Wilma") | Follow that Source's sub-flow under "2. Connect" in PLUGIN/skills/setup/SKILL.md: say why it's needed, run its $FB setup command, act on its result. Then add what it found to the config, as in "4. Check" there: for Wilma, wilma.enabled: true, and any Kid it lists that isn't in the config yet. Run $FB doctor, and if they want to see it working, $FB bg run --dry-run --lookback-hours 72 |
| Add WhatsApp ("add WhatsApp") | WhatsApp is read as a Linked Device, paired on the setup page: run $FB setup page, choose the way back to Connect on Finish, open WhatsApp from the list and scan the QR code in WhatsApp on the phone (Settings (on an iPhone: You) → Linked devices → Link a device). The groups are then picked on Check |
| Pair WhatsApp again ("pair WhatsApp again", 「重新关联 WhatsApp」, "linkitä WhatsApp uudelleen"; WhatsApp is ❌ "needs a new pairing" in doctor) | WhatsApp ended the link, or the groups were picked before WhatsApp was read as a Linked Device. Run $FB setup page: it opens at the WhatsApp step with a QR code, which the user scans in WhatsApp on the phone (Settings (on an iPhone: You) → Linked devices → Link a device). The picked groups stay picked: the page names them, with "Change the groups" to pick them again on Check, and "Continue" back to where it was. Run $FB doctor afterwards: its WhatsApp line names the picked groups |
| Change the WhatsApp groups read ("which WhatsApp groups are read", "change WhatsApp groups") | Run $FB setup page; Finish lists the picked groups by name, and "Change the groups" takes the user to Check to pick them again, then on through the first Brief to Finish |
| Turn a WhatsApp group's digest on or off ("summarize what the class group talks about", 「总结一下群里在聊什么」, "tiivistä ryhmän keskustelu") | Off for every group by default. With it on, the Brief also sums up in a few lines what that group talked about beyond the Kids' items, in the Brief's language: no message-by-message translation, nothing repeated from the Kids' items, no other parent or child named, and nothing for a group with no messages; it goes through the AI filter like everything else ("WhatsApp group digests" in PLUGIN/docs/config.md). Ask which group, find it in whatsapp.chats (by name, as $FB doctor lists them), and set digest: true on it, or remove digest to turn it off. Leave the group's other fields as they are. It takes effect from the next Brief. Or run $FB setup page; "Change the groups" on Finish leads to Check, where the option sits under each ticked group |
| Turn WhatsApp off ("turn WhatsApp off", 「关闭 WhatsApp」, "poista WhatsApp käytöstä") | Run $FB setup page; on Finish the user clicks "Turn WhatsApp off". It removes the always-running job, the pairing and the messages kept, keeping the picked groups for later. Tell them to remove "Parent Recap" under Settings (on an iPhone: You) → Linked devices in WhatsApp on the phone if it's still listed |
| Uninstall ("uninstall Parent Recap", 「卸载 Parent Recap」, "poista Parent Recap") | Follow "Uninstall" below |
After changing the config, run $FB doctor once and confirm there's no ❌.
Switch to Google Calendar
Setup always starts with the .ics attachment; this is how a family turns Google Calendar on. It needs a Google app file (the JSON of a Desktop OAuth client), which the plugin doesn't include: pilot families get it from the Parent Recap team, and everyone else creates their own by following "Creating your own Google app" in PLUGIN/docs/sources.md.
- If
~/.family/calendar_credentials.jsonis missing, ask the user where the file is, for example~/Downloads/xxx.json(dragging the file onto a Terminal window types its path there, to copy). Ask only for the path: the file contains a secret, so the user doesn't paste its contents and you don't open it. If they don't have it, they stay with ics until they do. - Copy it with the command in step 1 of google mode under "Calendar" in
sources.md, with their path, in quotes, in place ofdownloaded-file.json. - Set
google_calendar.mode: google. The partner's Gmail can go ingoogle_calendar.invite_attendees. - Run
bash "PLUGIN/install.sh"(in Codex, outside the sandbox). With the config in google mode, it installs Google's packages, which only Google Calendar needs and a default install leaves out. If it stops with "couldn't install its Python packages", do what it says and don't go on to step 5. - Have the user run
$PY ~/ParentRecap/app/scripts/setup_google_calendar.pyin Terminal. When the browser says "Google hasn't verified this app", they click Advanced → Go to (app name) → Allow. Then run$FB doctorto check the authorization.
Uninstall
For a family that stops using Parent Recap, or a maintainer who wants to run setup again on the same Mac. In Codex, run these commands outside the sandbox (Codex asks for approval).
- Run
$FB uninstall. It removes nothing yet: it lists everything setup created on this Mac. If$FBdoesn't exist, the program is already gone; follow the "Uninstalling" section ofPLUGIN/docs/troubleshooting.mdinstead. - If it ends with ❌ Stopped, it found something in Parent Recap's places that isn't this install's, such as an older install's scheduled job. Tell the user what it says, in their language, and stop there. Don't remove anything by hand.
- Otherwise show the user the list in their language. Ask with AskUserQuestion whether to keep the archive of past Briefs (keep first), then whether to remove everything listed. Say first that macOS may ask them to allow deleting each Keychain item, and asks for their Mac password to cancel the wake schedule.
- Only once they confirm, run
$FB uninstall --confirm --keep-archive, or--remove-archiveif they chose to remove it. For any ❌ line, help them do what it says, then run$FB uninstallagain. - Tell them every point under "What uninstall leaves to you" in its output, in their language. When it says to remove the plugin in Claude Code (setup didn't install it), that last step is theirs: they type
/plugin uninstall parent-recap@kinlaceand/plugin marketplace remove kinlace.
Check the version
cat ~/ParentRecap/app/VERSION; grep '"version"' "PLUGIN/.claude-plugin/plugin.json"If the two version numbers differ, the plugin has been updated but the program hasn't caught up. Run install.sh again as described in "Upgrading".
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

