Install
openclaw skills install baby-trackerLog, query, import, and chart baby care events as a private CSV-based replacement for baby tracking apps such as Huckleberry. Use when recording or analyzing diaper changes, feeds, sleep, growth/weight/height, temperature, medication, illness notes, or extensible baby measurements; also use when asked for baby charts, weight graphs, percentile lines, summaries, trends, imports, or CSV exports.
openclaw skills install baby-trackerUse this skill to maintain a private append-only baby log in CSV form and answer natural-language tracking/query/chart requests.
Default data directory:
~/.openclaw/workspace/data/baby-tracker
Override it for any command with either:
export BABY_TRACKER_DIR=/path/to/baby-tracker-data
python3 scripts/baby_tracker.py --data-dir /path/to/baby-tracker-data ...
Files:
events.csv — append-only flexible event log.metadata.json — baby metadata (name, date_of_birth, sex, timezone, extra fields).weight_percentiles_approx.csv — approximate visual guide percentile data generated by the script.who/who_weight_lms.csv — optional official WHO LMS/z-score data for precise weight-for-age charts.charts/*.html and charts/*.png — generated chart outputs.Never delete or rewrite events.csv unless explicitly asked. Append corrections as a new correction event or ask before destructive cleanup.
Run commands from this skill directory, or use the absolute path to the installed skill:
python3 scripts/baby_tracker.py ...
The scripts use only Python stdlib.
Set these before age-aware charts or percentiles:
python3 scripts/baby_tracker.py meta --name "Baby" --date-of-birth YYYY-MM-DD --sex female --timezone Europe/London
--field key=value can store arbitrary metadata such as birth_weight_kg=3.4, height_cm=52, notes=....
General pattern:
python3 scripts/baby_tracker.py log \
--type diaper \
--subtype both \
--field pee=large \
--field poo=small \
--notes "optional note" \
--source-text "original message" \
--at "2026-05-03 10:14"
Omit --at to use current time in the baby's configured timezone. Preserve the original user message in --source-text when helpful.
Preferred event shapes:
--type diaper --subtype wet|dirty|both|dry --field pee=small|medium|large --field poo=small|medium|large|...--type growth --subtype weight --metric weight --value 4.53 --unit kg--type growth --subtype height --metric height --value 55 --unit cm--type temperature --metric temperature --value 38.2 --unit C --field method=ear--type feed --subtype bottle --metric volume --value 50 --unit ml --field milk=breast|formula--type feed --subtype breast --field side=left|right|both --field duration_min=20--type sleep --metric duration --value 90 --unit min plus optional start/end in fields.--type medication --subtype calpol --metric dose --value 2.5 --unit ml.--type, optional --subtype, and structured --field key=value details. The schema is intentionally extensible.If a message is ambiguous but low risk, log the raw information with notes/source_text rather than blocking. Ask only when the missing detail changes the meaning materially, such as unknown units or ambiguous baby identity in a multi-baby setup.
Examples:
python3 scripts/baby_tracker.py query --type diaper --since today
python3 scripts/baby_tracker.py query --metric weight --format json
python3 scripts/baby_tracker.py query --since 7d --format summary
Use summaries for chat replies. Use JSON/CSV when doing analysis.
For quick generic charts, generate a self-contained HTML/SVG chart:
python3 scripts/baby_tracker.py chart --metric weight
For WHO weight-for-age percentile claims, prefer the official WHO LMS PNG renderer:
python3 scripts/render_weight_png.py
It expects official WHO weight-for-age LMS/z-score data at:
$BABY_TRACKER_DIR/who/who_weight_lms.csv
# or, by default:
~/.openclaw/workspace/data/baby-tracker/who/who_weight_lms.csv
If the WHO LMS CSV needs rebuilding from downloaded WHO Excel files, place those files in the who/ data directory and run:
python3 scripts/build_who_weight_lms.py
To send a chart image in chat, run the PNG renderer and attach the generated charts/weight-latest.png or the path printed by the script.
When a terse baby log message arrives:
Examples:
For queries, run query, inspect the result, and answer naturally. For chart requests, run the appropriate chart command and return the output file when requested.
When given a Huckleberry CSV, import it conservatively with the idempotent importer:
python3 scripts/import_huckleberry.py /path/to/Huckleberry.csv
Use --dry-run first for unusual files. The importer:
Type=Growth with Start Condition like 4.53kg to growth/weight.Type=Diaper and notes like Both, pee:large poo:small to diaper events.Type=Feed rows to breast/bottle feed events, preserving duration, side, location, milk, and volume fields where possible.Sleep, Pump, and custom activity rows to extensible event types.source_text and structured Huckleberry columns in details_json for auditability.