{"ok":true,"site":{"host":"village-family.jp-hickey.chatgpt.site","url":"https://village-family.jp-hickey.chatgpt.site/","type":"live","desc":"The family coordination layer for shift work, childcare and real life.","tools":[{"name":"get_family_briefing","kind":"answer","impl":"imperative","description":"Return a calm, read-only briefing of what changed, the next family shifts and any childcare issue needing attention.","title":"Get family briefing","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_family_schedule","kind":"answer","impl":"imperative","description":"Read the demo household schedule for 31 August to 6 September 2026, including parent shifts and confirmed childcare. Never changes data.","title":"Get family schedule","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"add_overtime","kind":"act","impl":"imperative","description":"Add John's overtime to the shared calendar. Changes family state. Call with confirmed=false to preview; only call with confirmed=true after John explicitly approves.","title":"Add overtime","inputSchema":{"type":"object","additionalProperties":false,"properties":{"date":{"type":"string","enum":["2026-09-01"]},"start":{"type":"string","enum":["16:00"]},"end":{"type":"string","enum":["22:00"]},"confirmed":{"type":"boolean","description":"True only after explicit human confirmation."}},"required":["date","start","end","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"detect_childcare_gap","kind":"act","impl":"imperative","description":"Compare both parents' recorded commitments to check whether Ida and Arlo need childcare on Tuesday 1 September. Analysis only.","title":"Detect childcare gap","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"date":{"type":"string","enum":["2026-09-01"]}},"required":["date"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"find_available_carers","kind":"answer","impl":"imperative","description":"Find trusted carers whose recorded availability covers a childcare gap. Returns no contact details and never changes data.","title":"Find available carers","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"gap_id":{"type":"string","enum":["gap-tue-1"]}},"required":["gap_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_coverage_relay","kind":"act","impl":"imperative","description":"Build a read-only sequential childcare request plan. Validates trusted carers, order and response window. Never contacts anyone.","title":"Preview Village Relay","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"gap_id":{"type":"string","enum":["gap-tue-1"]},"ordered_carer_ids":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["carer-anne","carer-grandad","carer-claire"]}},"response_window_minutes":{"type":"integer","minimum":5,"maximum":60}},"required":["gap_id","ordered_carer_ids","response_window_minutes"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_coverage_relay","kind":"act","impl":"imperative","description":"Start one approved sequential request Relay. Contacts only one trusted carer at a time and stops on acceptance. Call with confirmed=false to preview the consent boundary; only call with confirmed=true after John approves the entire named order and response window.","title":"Start Village Relay","inputSchema":{"type":"object","additionalProperties":false,"properties":{"relay_plan_id":{"type":"string","enum":["relay-plan-tue-1"]},"ordered_carer_ids":{"type":"array","minItems":1,"uniqueItems":true,"items":{"type":"string","enum":["carer-anne","carer-grandad","carer-claire"]}},"response_window_minutes":{"type":"integer","minimum":5,"maximum":60},"idempotency_key":{"type":"string","minLength":4},"confirmed":{"type":"boolean","description":"True only after John approves the full Relay."}},"required":["relay_plan_id","ordered_carer_ids","response_window_minutes","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"record_childcare_response","kind":"act","impl":"imperative","description":"Record the active carer's stated response. A decline or timeout advances exactly once inside the approved Relay; an acceptance stops the Relay and updates the shared calendar.","title":"Record carer response","inputSchema":{"type":"object","additionalProperties":false,"properties":{"request_id":{"type":"string","enum":["request-anne-1","request-grandad-1","request-claire-1"]},"response":{"type":"string","enum":["accepted","declined","timed_out"]},"response_id":{"type":"string","minLength":4,"description":"Stable source event ID for duplicate-safe handling."}},"required":["request_id","response","response_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_village_status","kind":"answer","impl":"imperative","description":"Summarise current overtime, gap, request and childcare coverage. Never changes data.","title":"Get Village status","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"reset_village_demo","kind":"act","impl":"imperative","description":"Reset only this fictional challenge demo. Removes demo actions, so use only after an explicit request to reset.","title":"Reset Village demo","inputSchema":{"type":"object","additionalProperties":false,"properties":{"confirmed":{"type":"boolean"}},"required":["confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"prepare_rota_import","kind":"act","impl":"imperative","description":"Validate shifts extracted from a rota image and produce a reviewable, confirmation-bound import plan. This does not change the family calendar. Re-run with corrected rows when any row needs review.","title":"Prepare rota import","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"person":{"type":"string","minLength":1,"maxLength":80,"description":"Exact name of an existing household member."},"candidates":{"type":"array","minItems":1,"maxItems":31,"items":{"type":"object","additionalProperties":false,"properties":{"sourceRowId":{"type":"string","minLength":1,"maxLength":64},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"label":{"type":"string","minLength":1,"maxLength":80},"confidence":{"type":"number","minimum":0,"maximum":1},"sourceText":{"type":"string","maxLength":240},"ambiguityFlags":{"type":"array","maxItems":8,"uniqueItems":true,"items":{"type":"string","minLength":1,"maxLength":48}}},"required":["sourceRowId","date","start","end","confidence"]}}},"required":["person","candidates"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_rota_import_plan","kind":"answer","impl":"imperative","description":"Read an existing rota import preview by plan ID. Never changes the family calendar.","title":"Get rota import plan","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^rota-plan-[a-f0-9]{8}$"}},"required":["plan_id"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_rota_import","kind":"act","impl":"imperative","description":"Atomically add every ready shift from one exact reviewed plan. Call with confirmed=false first to show the human consent boundary, and confirmed=true only after explicit approval. Stale, ambiguous and invalid plans are rejected.","title":"Commit reviewed rota import","inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^rota-plan-[a-f0-9]{8}$"},"idempotency_key":{"type":"string","minLength":4,"maxLength":100},"confirmed":{"type":"boolean","description":"True only after the person explicitly approves this exact plan."}},"required":["plan_id","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_imported_shifts","kind":"answer","impl":"imperative","description":"Read rota-scan shifts currently committed to the family calendar, including their import provenance. Never changes data.","title":"Get imported shifts","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_shift_pattern","kind":"act","impl":"imperative","description":"Create a read-only preview of a repeating rota such as Early, Early, Late, Late, Night, Night, Off, Off, Off, Off. Supports a cycle count, an end date, or continuing until stopped. Never changes the calendar.","title":"Preview repeating shift pattern","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"person":{"type":"string","minLength":1,"maxLength":80,"description":"Exact name of an existing household member."},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"sequence":{"type":"array","minItems":1,"maxItems":84,"items":{"type":"string","maxLength":20}},"definitions":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"string","minLength":1,"maxLength":60},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["code","label","start","end"]}},"repeat_mode":{"type":"string","enum":["cycles","until","indefinite"]},"cycles":{"type":"integer","minimum":1,"maximum":520},"until_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["person","start_date","sequence","definitions","repeat_mode"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_shift_pattern","kind":"act","impl":"imperative","description":"Save one exact reviewed pattern as a compact recurring rule. Call with confirmed=false to show the consent boundary and true only after explicit approval.","title":"Save repeating shift pattern","inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^pattern-plan-[a-f0-9]{8}$"},"idempotency_key":{"type":"string","minLength":4,"maxLength":100},"confirmed":{"type":"boolean"}},"required":["plan_id","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_shift_patterns","kind":"answer","impl":"imperative","description":"Read active repeating shift rules. Never changes data.","title":"Get shift patterns","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{},"required":[]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"get_pattern_shifts","kind":"answer","impl":"imperative","description":"Generate the visible shifts for one saved pattern and a date range of up to 366 days. Never copies or changes calendar data.","title":"Get generated pattern shifts","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"pattern_id":{"type":"string","pattern":"^pattern-[a-f0-9]{8}$"},"from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["pattern_id","from","to"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_pattern_exception","kind":"act","impl":"imperative","description":"Preview changing one occurrence in a repeating rota to another shift or a rest day. The underlying series is not changed.","title":"Preview one rota exception","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"pattern_id":{"type":"string","pattern":"^pattern-[a-f0-9]{8}$"},"date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"},"code":{"type":"string","minLength":1,"maxLength":20,"description":"A saved shift code, off, or a new custom code with definition."},"definition":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"string","minLength":1,"maxLength":60},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["code","label","start","end"]}},"required":["pattern_id","date","code"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_pattern_exception","kind":"act","impl":"imperative","description":"Save one exact reviewed occurrence change. Requires explicit confirmation and never rewrites the remaining series.","title":"Save one rota exception","inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^pattern-exception-[a-f0-9]{8}$"},"idempotency_key":{"type":"string","minLength":4,"maxLength":100},"confirmed":{"type":"boolean"}},"required":["plan_id","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_stop_shift_pattern","kind":"act","impl":"imperative","description":"Preview stopping a repeating rota from a chosen date while preserving earlier shifts.","title":"Preview stopping a shift pattern","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"pattern_id":{"type":"string","pattern":"^pattern-[a-f0-9]{8}$"},"effective_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["pattern_id","effective_date"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_stop_shift_pattern","kind":"act","impl":"imperative","description":"Stop one exact reviewed repeating rota from a chosen date. Requires explicit confirmation.","title":"Stop a shift pattern","inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^pattern-stop-[a-f0-9]{8}$"},"idempotency_key":{"type":"string","minLength":4,"maxLength":100},"confirmed":{"type":"boolean"}},"required":["plan_id","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"preview_pattern_edit","kind":"act","impl":"imperative","description":"Preview a reviewed replacement for one repeating rota. Choose this_and_future to preserve history, or entire_series to replace the rule from its original start. Never changes the calendar.","title":"Preview editing a shift pattern","annotations":{"readOnlyHint":true},"inputSchema":{"type":"object","additionalProperties":false,"properties":{"pattern_id":{"type":"string","pattern":"^pattern-[a-f0-9]{8}$"},"scope":{"type":"string","enum":["this_and_future","entire_series"]},"effective_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Required for this_and_future; ignored for entire_series."},"sequence":{"type":"array","minItems":1,"maxItems":84,"items":{"type":"string","maxLength":20}},"definitions":{"type":"array","minItems":1,"maxItems":8,"items":{"type":"object","additionalProperties":false,"properties":{"code":{"type":"string","minLength":1,"maxLength":20},"label":{"type":"string","minLength":1,"maxLength":60},"start":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"},"end":{"type":"string","pattern":"^([01]\\d|2[0-3]):[0-5]\\d$"}},"required":["code","label","start","end"]}},"repeat_mode":{"type":"string","enum":["cycles","until","indefinite"]},"cycles":{"type":"integer","minimum":1,"maximum":520},"until_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},"required":["pattern_id","scope","sequence","definitions","repeat_mode"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"},{"name":"commit_pattern_edit","kind":"act","impl":"imperative","description":"Save one exact reviewed pattern edit. Requires explicit confirmation and preserves earlier shifts when scope is this_and_future.","title":"Save a shift pattern edit","inputSchema":{"type":"object","additionalProperties":false,"properties":{"plan_id":{"type":"string","pattern":"^pattern-edit-[a-f0-9]{8}$"},"idempotency_key":{"type":"string","minLength":4,"maxLength":100},"confirmed":{"type":"boolean"}},"required":["plan_id","idempotency_key","confirmed"]},"hasHandler":true,"hasExecute":true,"__source":"spec","executable":true,"handlerField":"execute"}],"favicon":"/favicons/village-family.jp-hickey.chatgpt.site.png","apiSurface":"spec","category":"Media & Personal","toolCount":24}}